ASP.NET自定义控件开发点滴(一)

    技术2022-05-11  31

     出处:http://blog.csdn.net/caoxicao 作者:草惜草 转载请注明出处这次在学习DotNet自定义控件开发过程中将会把一些小小的心得写出来,一来让自己记得更加牢固,二来也可以为后来人提供学习的方向。1. 自定义控件从WebControl类而不是从Control类派生而来,那么就能够继承到许多附加的属性。     比如高度,宽度,字体和其他样式相关的属性。这些属性可以允许页面开发者自定义控件的外观。当从WebControl类中派生时,应该遵循如下约定:   ◎ 包含一个到System.Web.UI.WebControls命名空间的引用。   ◎ 不要通过重载Render方法来直接向外输出流中写数据,这是因为WebControl的Render方法实现了一段代码,这段代码向外提供带有样式信息的标签。如果想在控件的标签内提供内容,那么可以用重载RenderContents方法来实现。

    2. 为控件选择基类

        ◎ 如果控件要生成非可视化的元素或者显示给非HTML客户端,那就因该从System.Web.UI.Control类派生。        标签<meta >和<xml>就是非可视化元素显示的例子。

        ◎ 如果想提供一些在客户端生成可视化界面的HTML,那么就应该从System.Web.UI.WebControls.WebControl派生。

        ◎ 当想扩展或者修改控件的功能时,应该从一个已经存在的控件派生,比如标签、按钮和文本框。可以任何一个System.Web.UI.WebControls命名空间中的控件或者自定义控件派生。但是不要从System.Web.UI.HtmlControls命名控件中的控件派生。

         理解这部分,我们最好来看看WebContorl中Render方法的实现。

           protected overide void Render(HtmlTextWriter writer){                RenderBeginTag(writer);                RenderContents(writer);                RenderEndTag(writer);        }

      由此可见,WebControl中的Render已经被格式化了的。其中,RenderBeginTag表示标签的开始,如:writer.RenderBeginTag("<H2>") writer.RenderEndTag()即可表示包含在<H2></H2>再来看看WebControl中的RenderContents实现代码:protected virtual void RenderContents(HtmlTextWriter writer){         //可以看到RenderContents方法回调了基类的Render方法          base.Render(writer)}综上,当想要生成Web控件标签中的内容时,需要重载RenderContents方法。

     

    最新回复(0)