Mobile Web Application中的TextArea控件开发(一)

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

privateint_cols=0;
publicintCols
{
get{returnthis._cols;}
set{this._cols=value;}
}

privateint_rows=0;
publicintRows
{
get{returnthis._rows;}
set{this._rows=value;}
}

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


publicoverridevoidRender(HtmlTextWriterwriter)
{
writer.WriteBeginTag(
"textarea");

StringrenderName;
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,增加对设备的支持,我就是在这一步被卡住了...先提交吧,下一篇再讨论.

你可能感兴趣的:(Web,UI,asp.net,mobile,asp)