分享
 
 
 

ASP.NET立即上手教程(14)

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

创作自定义服务器控件

本章的内容演示高级开发者如何书写ASP.NET页面中的服务器控件。通过书写自定义的服务器控件,可以封装定制的用户接口以及其他功能。本教程通过一系列逐渐展开的例子提供了创作自定义控件的入门知识。关于控件创作的更多信息,参阅.NET Framework SDK文档中“开发ASP.NET服务器控件”部分。

重要提示:本章表述的控件尽管可以在ASP.NET页面的运行时刻正常运行,但是在页面开发工具,如Microsoft Visual Studio.NET,设计时却有可能无法正常工作。为了在设计器中正常工作,自定义控件需要应用设计时刻属性----该属性在本章不进行表述。关于设计时刻属性的细节,参阅SDK文档中“组件的设计时刻属性”部分。

开发一个简单的自定义控件

开始创作自己的ASP.NET服务器控件其实很容易。要想建立一个自定义控件,你需要做的全部工作仅仅是定义一个从System.Web.UI.Control继承而来得类,并且覆盖它的Render方法。Render方法带有一个System.Web.UI.HtmlTextWriter类型的参数。控件需要发送到客户端的HTML代码作为字符串参数传递给HtmlTextWriter的Write方法。

下面的例子演示了一个简单的自定义服务器控件,用来交付一条消息字符串。

C# Simple.aspx

[运行] | [源程序]

定义简单的属性

属性类似于“聪明”的字段,它具有存取器方法。你可能从你的控件中expose属性而不是公共字段,因为属性允许数据隐藏,可以版本控制,并且可以被可视化设计工具所支持。属性具有get/set存取器方法,用来设置和取得属性值,并允许在必要的时候执行额外的程序逻辑。

下面的例子展示如何增加简单的属性,它对应私有数据类型,如整数、布尔和字符串。这个例子定义了三个属性:Message是字符串类型、MessageSize是枚举类型、Iterations是整数类型的。请注意设置简单属性和枚举属性的ASP.NET页面语法。

C# Simple.aspx

[运行] | [源程序]

定义类属性

如果类A的属性类型是类B,那么B的属性被称为A的子属性。下面的例子定义了一个自定义服务器控件SimpleSubProperty,它有一个Format类型的属性。Format是一个具有两个私有属性的类:Color和Size ,他们依次成为了SimpleSubProperty的子属性

C# Simple.aspx

[运行] | [源程序]

注意ASP.NET具有特定的语法来设定子属性。下面的代码显示了如何显式设置SimpleSubProperty的子属性Format.Color和Format.Size。“-”语法表示子属性。

<SimpleControlSamples:SimpleSubProperty Message="Hello There" Format-Color="red" Format-Size="3" runat=server/>

找回内部的内容

每个控件都有一个从System.Web.UI.Control继承的Controls属性。这是一个集合属性,表示控件的子控件。如果一个控件没有用ParseChildrenAttribute或者ParseChildrenAttribute(ChildrenAsProperties = false)标识,那么当控件在页面中声明的时候,ASP.NET页面框架就会应用下面的解析逻辑。如果解析器在控件的标签中遇到嵌套控件,它就会建立控件实例,并将其添加到控件的Controls属性。标签间的文字文本被添加为LiteralControl。任何其他嵌套元素产生一个解析错误。

下面的例子展示了一个自定义控件SimpleInnerContent,通过检查LiteralControl是否被添加到它的控件集合中,来决定是否将交付的文本增加到它的标签之间。如果是,它就取得LiteralControl的Text属性,然后将其添加到输出字符串。

C# Simple.aspx

[运行] | [源程序]

重要提示:如果你的自定义控件从WebControl衍生而来,它将不会有上面例子中描述的解析逻辑,因为WebControl用ParseChildrenAttribute(ChildrenAsProperties = true)标记,它导致不同的解析逻辑。关于ParseChildrenAttribute的更多信息,请参阅.NET Framework SDK文档。

开发复合控件

你可以使用类的合成,通过组合现在有的控件来创作新的控件。复合控件类似于用户控件,也是使用ASP.NET语法来创建。用户控件和复合控件的主要区别是:用户控件是扩展名为.ascx的文本文件,而组合控件是编译过的,已汇编的方式使用。

开发组合控件的关键步骤是:

· 覆盖从Control继承的保护型方法CreateChildControls,建立子控件的实例,并将其添加到控件集合。

· 如果页面中的复合控件实例需要重复创建,需要引入System.Web.UI.INamingContainer接口。这是一个没有方法的标签接口。当他被控件引入的时候,ASP.NET将在这个控件下面建立一个新的名称空间。这就保证了子控件在控件的继承树中具有唯一的ID。

你不必覆盖Render方法,因为子控件提供了交付逻辑。你可以引申子控件合成的属性。

下面的例子定义了一个复合控件Composition1,它合并了System.Web.UI.LiteralControl和System.Web.UI WebControls.TextBox. Composition1,引申了一个整数类型的自定义属性Value,映射TextBox到的Text属性。

C# Simple.aspx

[运行] | [源程序]

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有