SHARE & TOP

我会变成童话里,你爱的那个天使

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
其实这篇文章本不想写的,但是考虑到这件事也折腾了我大半天的,唉...记下来也给自己一个总结吧.
 
在用VS.NET做移动WEB开发时,很明显有一个控件是非常有用但是VS.NET却没有提供的,那就是TextArea,多行输入.
 
我Google了一下,发现有一篇文章介绍如何自定义这个控件,原文在这里. 另外,在asp.net网站也有一个现成的控件可以下载,参考这里.
 
大家可以直接去看我上面提供的两个链接,也可以接着往下看,我会先简要地介绍一下代码开发,然后重点是总结在配置方面的问题.而这一点,上面老外的文章中却言之甚少.
 
开发一个自定义控件,要自己实现两个类,一是派生于某个控件的你想要的控件类,二是负责将这个控件Render出来的适配器类(Adapter).
 
首先,我们实现一个叫MultiLineTextBox类,派生于TextBox类,比较简单,就是多了两个属性Cols和Rows.代码如下: 
 public class MultiLineTextBox : System.Web.UI.MobileControls.TextBox
 

  
  
private int _cols=0;
  
public int Cols
  
{
   
getreturn this._cols; }
   
setthis._cols=value; }
  }
 
  
private int _rows=0;
  
public int Rows
  
{
   
getreturn this._rows; }
   
setthis._rows=value; }
  }

 }
  
当然你也可以象老外文章那样,直接把两个属性值放在ViewState中,如果你不打算在你的程序中禁用ViewState的话,这应该是一个更好的办法.
 
第二步,实现一个派生于ControlAdapter的MultiLineTextBoxAdapter类,重载一个属性和一个方法即可.代码如下:
public class HTMLMultiLineTextBoxAdapter : System.Web.UI.MobileControls.Adapters.ControlAdapter
 
{
  
protected new MultiLineTextBox Control
  
{
   
get  {  return (MultiLineTextBox)base.Control;   }
  }

 
  
public override void Render(HtmlTextWriter writer)
  
{
   writer.WriteBeginTag(
"textarea");
      
   String renderName;
   
if(Device.RequiresAttributeColonSubstitution)
   
{
    renderName 
= Control.UniqueID.Replace(':'',');
   }

   
else
   
{
    renderName 
= Control.UniqueID;
   }

   writer.WriteAttribute(
"name", renderName);  
   writer.WriteAttribute(
"cols",Control.Cols.ToString());
   writer.WriteAttribute(
"rows",Control.Rows.ToString());
      
   writer.Write(
">");
   writer.Write(Control.Text);
   writer.WriteEndTag(
"textarea");

  }

 }

 
 
属性Control的重载说明我要管理的类叫MultiLineTextBox.而重载的Render方法则具体了如何在页面中去表现这个控件,就是输出一个textarea标签.
 
第三步,修改web.config,增加对设备的支持,我就是在这一步被卡住了...先提交吧,下一篇再讨论.
 
 
posted on 2005-08-16 12:09  Android@SHARETOP  阅读(2143)  评论(5编辑  收藏  举报