您的位置:首页 > 编程语言 > ASP

asp.net控件开发基础(4)

2006-08-05 16:16 573 查看
上一篇写了有关回传的一些东西,这次我本来不知道该写什么的,因为各方面的关联太多了,最后我还是想,还是慢慢一点点的写吧.这次讲WebControl

一.从继承WebControl开始

在第二篇教程中,重点介绍了Render()方法的使用,用来呈现控件,但从Control类继承的控件尚未发挥asp.net控件的作用.大家知道web服务器控件分为HTML服务器控件(如<input id="Button2" runat="server" type="button" value="button" />这样的形式)和标准服务器控件(就是<asp:.. id="" runat="server" />这样的形式的控件)

HTML服务器控件的控件从System.Web.UI.HtmlControls.HtmlControl 类派生

标准服务器控件的控件从System.Web.UI.WebControls.WebControl 类派生

HtmlControl 类和WebControl 类则从System.Web.UI.Control 类派生,并扩展.

所以我们说,所有的服务器控件都继承自System.Web.UI.Control 类,即所有的服务器控件都具有Control 类的共同属性,如Visible,EnableViewState属性,HtmlControl 类和WebControl 类则扩充了System.Web.UI.Control 类的功能,如

HtmlControl 类定义了所有 HTML 服务器控件所通用的方法、属性 (Property) 和事件(具体参数参照MSDN)

WebControl 类定义了所有 标准服务器控件所通用的方法、属性 (Property) 和事件(具体参数参照MSDN)

如每个继承了WebControl 类的标准控件都有定义外观和行为的属性,然后不同控件再根据需要扩展功能.
protected override void Render(HtmlTextWriter output)
public virtual void RenderBeginTag(HtmlTextWriter output)
protected override void Render(HtmlTextWriter writer)
protected override HtmlTextWriterTag TagKey
protected override void AddAttributesToRender(HtmlTextWriter writer)
protected override void RenderContents(HtmlTextWriter writer)
<span id="CreditCardForm5_1"><table style="border-width:0;">
<tr>
<td><strong>信用卡类型</strong></td><td><select name="PaymentMethod" id="PaymentMethod" style="width:100%;">
......

假设我们称<span>里面的<table>等标签为子标签,在RenderContents方法应该定义控件的子标签,如果你只定义标签属性的话,只需重写AddAttributesToRender方法即可,可不须重写RenderContents方法.

下面再讲下重写标签的方法

(1) 重写TagKey属性,下面重写label控件的标签

public class Ch4Label: Label
{
public CreditCardForm5() : base(HtmlTextWriterTag.Table) { }

最后总结下:
1.控件继承自WebControl类 主要原因是WebControl类公共的东西比Control类
2.TagKey 表示控件的标签,默认情况下为<span>,可以重写此属性修改或者重写WebControl类的构造函数
3.AddAttributesToRender方法 为标签添加属性和样式
4.RenderContents方法 在标签内呈现内容

如果控件不复杂,则可直接从标准控件继承(如label),再根据需要扩展,重写AddAttributesToRender方法,还可以重写
TagKey更改默认标签,而无须重写RenderContents方法.如果控件比较复杂,不是单一的,则需要在RenderContents方法输出控件的内部的内容.

其实最大的区别就是默认情况下WebControl类为你加了一个标签,方便添加WebControl类的一些公共的东西,如果你重写Render()方法,而舍弃RenderContents方法,你就无福享受WebControl类给你提供的这么多属性和方法了.

大家多熟悉下WebControl类的一些公共属性,然后再多改改,可以明白的更加深刻.

我喜欢慢慢的把东西全讲全,不然心里不舒服,所以我就慢慢写了,当然前提是我理解的基础上.这次的例子,大家可根据第二篇的代码适当修改就可.错误之处还请指出^_^

参考文章:http://dev.yesky.com/msdn/37/2416037.shtml
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: