1.实例化(Instantiate)
我们写控件一般不要接触此活动。
2.初始化(Initialize)
同上。
3.跟踪视图(Tracking View State)*
这个比较重要,涉及到视图状态,一般情况下不必重载此方法。
4.加载视图状态(Load view state)*
只会在回传过程中调用此方法,用法同上。
5.加载回传数据(Load postback data)*
如果你的控件生成之后要和客户端交互,那么这个方法就很重要,只会在回传过程中调用此方法。
6.开始载入(Load)
这个活动一般只是Page的OnLoad才会要去管它,我们写控件一般不要接触此方法。
7.有修改(Raise changed events)*
控件生成后,数据被客户端更改过,和加载回传数据是一路的。
8.回传事件处理(Raise postback event)*
一般用于实现IPostBackEventHandler接口的控件的把客户端事件转化成服务器端事件。只用于回传过程。
9.生成预处理(PerRender)**
生成前期工作,这个是很重要的一个过程,通过重载OnPreRender方法实现自定义。
10.保存视图状态(Save view state)*
如果所以信息都是用ViewState[xxx]这种方式来保存,不必重载,只有自定义视图状态管理时才重载此方法,当然,这里做了手脚,LoadViewState也就一定要和这里的Save方法配套。
11.生成(Render)***
这个是主角,控件成生什么东东基本就由这里管了。
12.卸载(Unload)
13.释放(Dispose)
了解控件的生命周期的细节对于我们自定义控件的各个部分以及调试控件,排除控件Bug都是至关重要的。
当然这此过程中有些活动是我们要特别重视的,我在这些活动的后面加了*号。
“装装孙子”
还记得我在上一篇文章中说.net框架已经为我们做了大部分的事情吗?确实,我们写一个控件不是平地起高楼,我们已经有了很多成品和半成品了。很多情况下,为了快速开发一个控件,你甚至可以使自己的控件直接继承于TextBox、Button之类具体的控件,略做修改,就可实现自己的功能。如果没有这样的好事,那你也最好考虑从以下两个类继承:System.Web.UI.Control、System.Web.UI.WebControls.WebControl,第一个类适合于派生生成不是可视HTML对象的控件,如生成<meta><xml>之类内容的控件,第二个类适合于生成各种HTML对象,它已经实现了基本的样式管理、HTML标签生成等等功能。
属性全接触(一)
本系列上篇文章有几位抬爱,鼓励了几句,所以劲头又足了,这不,这篇文章就出得快了,:)
希望能继续得到鼓励和指正。
这次我们来探讨下控件开发中的属性设计的方方面面,属性本是各种.net下语言的最基本语法,但控件做为一种提供给程序员二次开发的发布件,其功能的强大与使用的灵活都离不开良好的属性设计,所以我觉得属性设计是控件开发中第一座要打下的堡垒。
首先我们来看一段.aspx文件中的HTML样式的代码:
这种代码大家都写过无数次了,不过,现在我们要从另一种角度来分析这段代码:
DropDownList控件在和用户交互时,它没有把它的属性一股脑放在一起来表示出来,而是分为以下几种情况:
1.像ID、Runat、Font-Bold这些,放在<>标记里;
2.Font-Bold不同于其它,它有一个短横分隔成两部分,这种表示方式不是Font-Bold是一个属性的名称,而是说明它是一个子属性,是Font属性(Font类)的Bold属性,对应.cs文件的写法是:Font.Bold;
3.ListItem放在了DropDownList的一双<>标记的中间,而不是标记之类,同样1、2也放在了ListItem的中间。
下面我们来分别看看这几种属性记录方式是怎么实现的。
有一个Attribute来做这件事件PersistenceMode(System.Web.UI.PersistenceModeAttribute)。
它有以下几个值供选择:
Attribute(default)属性保存在控件的标签里;默认值
EnCodedInnerDefaultProperty 属性是编码的HTML,放在控件标签对的中间保存,以上的ListItem就是这样保存Text属性的(1、2);
InnerDefaultProperty 属性保存在控件标签对的中间,以上的DropDownList控件的Items属性就是这样保存的(就是那堆ListItem);
InnerProperty 属性和其它属性一起保存为控件标签对中的嵌套内容,DataGrid用这种方式把一堆东西包在标签里,这时,属性要用标签声明,内含属性值。
第二个议题,属性的持久性
众所周知,网页是基于无状态机制的,就是说,页面Response后就不管理保存页面内容的状态,ASP.net提供ViewState机制来保存页面的状态,ViewState是实现方式是送出页面中的一个名为__ViewState的input type='hidden',也就是说它和Session不同,它保存在页面中......不废话了,反正我们要保存控件的状态(就是它的各个属性),而不至于在回传的过程中丢失,我们采用的方案就是ViewState,下面简单的举个例子说明ViewState在Property中的用法
像这种方式直接使用ViewState是最简便的,我们不必改写LoadViewState、SaveViewState方法,至于怎么自定义ViewState管理,在后面的文章中将有介绍。
浙公网安备 33010602011771号