第一次亲密接触……开发ASP.NET服务器控件
首先,去GOOGLE下别人是如何开发的?有什么经验之谈?从中会遇到什么样的问题?
在这里,推荐一下:http://thinhunan.cnblogs.com/archive/2005/11/30/287648.html
其次,理想概念上的一些问题,这里就例举一些吧
1:用户控件和自定义控件的区别:
自定义控件 | 用户控件 |
---|---|
创作的最短设计时支持。 | 创作的完全设计时支持。在可视化设计器中,创作用户控件与创作 ASP.NET 页(“Web 窗体”页)没有差别。 |
以目标为公共语言运行库的面向对象的编程语言,如 C# 或 Visual Basic .NET,是用编程方式创作的。 | 使用 ASP.NET 页语法和脚本块(或代码隐藏页)声明性地创作的。 |
作为程序集 (.dll) 编译和保持的。 | 另存为带有 .ascx 扩展名的文本文件(带有可选的代码隐藏文件)。 |
非常适于创作一般的可重新发布的控件。 | 适合应用程序特定的功能。 |
设计时宿主中使用时的完全设计时支持。可以将自定义控件添加到可视化设计器的工具箱并拖放到页上。 | 设计器中的最小使用支持 |
阶段 | 控件需要执行的操作 | 要重写的方法或事件 |
---|---|---|
初始化 | 初始化在传入 Web 请求生命周期内所需的设置 | Init 事件(OnInit 方法) |
加载视图状态 | 在此阶段结束时,就会自动填充控件的 ViewState 属性,。 | LoadViewState 方法 |
处理回发数据 | 处理传入窗体数据,并相应地更新属性。 | LoadPostData 方法 |
加载 | 执行所有请求共有的操作,如设置数据库查询。此时,树中的服务器控件已创建并初始化、状态已还原并且窗体控件反映了客户端的数据。 | Load 事件
(OnLoad 方法) |
发送回发更改通知 | 引发更改事件以响应当前和以前回发之间的状态更改。 | RaisePostDataChangedEvent 方法 |
处理回发事件 | 处理引起回发的客户端事件,并在服务器上引发相应的事件。 | RaisePostBackEvent 方法 |
预呈现 | 在呈现输出之前执行任何更新。可以保存在预呈现阶段对控件状态所做的更改,而在呈现阶段所对的更改则会丢失。 | PreRender 事件 |
保存状态 | 在此阶段后,自动将控件的 ViewState 属性保持到字符串对象中。 | SaveViewState 方法 |
呈现 | 生成呈现给客户端的输出。 | Render 方法 |
处置 | 执行销毁控件前的所有最终清理操作。在此阶段必须释放对昂贵资源的引用,如数据库链接。 | Dispose 方法 |
卸载 | 执行销毁控件前的所有最终清理操作。控件作者通常在 Dispose 中执行清除,而不处理此事件。 | UnLoad 事件(On UnLoad 方法) |
3.属性应用说明
BrowsableAttribute
属性和事件
指定属性或事件是否应该显示在属性浏览器中。
CategoryAttribute
属性和事件
指定类别的名称,在该类别中将对属性或事件进行分组。当使用了类别时,组件属性和事件可以按逻辑分组显示在属性浏览器中。
DescriptionAttribute
属性和事件
定义一小块文本,该文本将在用户选择属性或事件时显示在属性浏览器底部。
BindableAttribute
属性
指定是否要绑定到该属性。
DefaultPropertyAttribute
属性
(将此特性插入类声明前。)
指定组件的默认属性。当用户单击控件时,将在属性浏览器中选定该属性。
DefaultValueAttribute
属性
为属性设置一个简单的默认值。
EditorAttribute
属性
指定在可视设计器中编辑(更改)属性时要使用的编辑器。
LocalizableAttribute
属性
指定属性应本地化。当用户要本地化某个窗体时,任何具有该特性的属性都将自动永久驻留到资源文件中。
DesignerSerializationVisibilityAttribute
属性
指定显示在属性浏览器中的属性是否应该(以及如何)永久驻留在代码中。
TypeConverterAttribute
属性
指定将属性的类型转换为另一个数据类型时要使用的类型转换器。
DefaultEventAttribute
事件
4自定义控件生成器
[ControlBuilder(typeof(SorterControlBuilder))]
public class Sorter : WebControl, IPostBackDataHandler {...}
以上方括号里的元素为公共语言运行库属性,该属性将 SorterControlBuilder类与 Sorter控件关联。通过从 ControlBuilder 派生并重写SorterControlBuilder方法,自定义了Sorter的生成器。
在后面代码我们可以看到,Sorter定义一个自定义控件生成器,它重写从 ControlBuilder 继承的 GetChildControlType 方法。此方法返回要添加的控件类型,并可用来决定将要添加哪些控件。
以上为准备工作。如不清楚,请转:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconcompositecontrolvsusercontrol.asp