科技时代新浪首页 > 科技时代 > 学园 > 正文

ASP.NET2.0服务器控件之创建自定义控件(3)


http://www.sina.com.cn 2006年05月22日 14:40 天极yesky

  代码说明之RenderContents方法:

  通常,在从WebControl派生控件并呈现单个元素时,应重写RenderContents方法(而不是Render方法),以呈现控件标记中的内容。在呈现控件及其样式属性的开始标记之后,WebControl的Render方法将调用RenderContents。如果重写Render方法以写入内容,则控件将丢失生成到WebControl的Render方法中的样式呈现逻辑。

  在源代码中,WelcomeLabel控件重写了继承的RenderContents方法以呈现Text属性及其他一些内容。传入RenderContents方法的参数是HtmlTextWriter类型的对象,它是具有呈现标记和其他HTML(和HTML变量)标记的方法的实用工具类。可能读者已经注意到:WelcomeLabel连续调用了HtmlTextWriter对象的Write方法,而不是先执行字符串串联,然后调用Write方法。这种做法可提高控件性能。字符串串联需要时间和内存来创建字符串,然后写入流。

  代码说明之元数据属性标记:

  如上代码所示,在WelcomeLabel类声明前包括以下3个元数据属性标记。

  (1)AspNetHostingPermissionAttribute

  它是代码访问安全属性。该属性使JIT编译器检查链接到WelcomeLabel的代码是否具有AspNetHostingPermission权限。所有的公共ASP.NET类均使用此属性标记。应将AspNetHostingPermissionAttribute应用于控件,以对部分受信任的被调用方进行安全检查。

  (2)DefaultPropertyAttribute

  它是设计时属性(Attribute),它指定控件的默认属性(Property)。在可视化设计器中,当页开发人员在设计图面上单击控件时,属性浏览器通常突出显示此默认属性。

  (3)ToolboxDataAttribute

  它用于指定元素的格式字符串。如果在工具箱中双击控件或将其从工具箱拖动到设计图面上时,该字符串将成为控件的标记。对于WelcomeLabel,该字符串创建此元素:

<aspSample:WelcomeLabel runat="server"> </aspSample:WelcomeLabel>

  另外,在属性Text的实现过程中还定义了以下元数据属性。

  (1)BindableAttribute(被指定为true或false)

  该元数据属性可用于指定将属性绑定到数据对可视化设计器是否有意义。例如,在VisualStudio2005中,如果属性标记为Bindable(true),则该属性可显示在"数据绑定"对话框中。如果属性(Property)没有使用此属性(Attribute)标记,则属性(Property)浏览器会推断其值为Bindable(false)。

  (2)CategoryAttribute

  该元数据属性用于指定如何在可视化设计器的属性浏览器中对属性进行分类。例如,当页开发人员使用属性浏览器的分类视图时,Category("Appearance")将告知属性浏览器在"外观"类别中显示属性。可以根据属性浏览器中的现有类别指定字符串参数,也可以创建自己的类别。

  (3)DescriptionAttribute

  该元数据属性用于指定属性的简短描述。在VisualStudio2005中,属性浏览器将在"属性"窗口底部显示选定的属性的描述。

  (4)DefaultValueAttribute

  该元数据属性用于指定属性的默认值。此值应与从属性访问器(getter)返回的默认值相同。在VisualStudio2005中,DefaultValueAttribute允许页开发人员通过在"属性"窗口中唤出快捷菜单然后单击"重置"按钮将属性值重置为其默认值。

  (5)LocalizableAttribute(指定为true或false)

  该元数据属性用于指定本地化属性对可视化设计器是否有意义。当某属性标记为Localizable(true)时,可视化设计器会在对本地化资源进行序列化时包含该属性。对控件轮询可本地化的属性时,设计器会将此属性值保存到非特定于区域性的资源文件或其他本地化源中。

  在编写完成WelcomeLabel控件的源代码之后,接着需要编译和测试所实现的自定义服务器控件。为了实现这一目的,开发人员需要在测试用Web站点中引用Web控件库项目输出,并编写相关代码以便测试服务器控件。

  在Web站点中实现Web控件库项目引用的方法比较简单。首先,右键单击解决方案资源管理器中的Web站点项目名称,在弹出的菜单中选中"添加引用..."一项。此时,将自动弹出如图4所示的窗口。

ASP.NET2.0服务器控件之创建自定义控件(3)

图4 添加引用对话框

  如图4所示,在添加引用窗口中包括5个选项卡,其中包括一个名为"项目"的选项卡。单击它可发现在其列表中包括一个上文创建的HelloMyControl项目。选中该项并单击"确定"按钮,即可完成项目引用。

  在完成项目引用后,Visual Studio 2005将自动在Web站点项目中添加一个Bin文件夹,并在其中包含了HelloMyControl.dll和HelloMyControl.pdb文件。前者是控件程序集,后者中则保存着调试和项目状态信息。这样,Web站点就能够顺利使用HelloMyControl项目的输出了。如下显示了为测试WelcomeLabel控件而创建的Default.aspx文件源代码。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register TagPrefix="self" Namespace="HelloMyControl" Assembly="HelloMyControl" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>创建一个简单的自定义服务器控件</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<self:WelcomeLabel Text="您好" ID="WelcomeLabel1" runat="server" BackColor="Wheat" ForeColor="SaddleBrown" />
</div>
</form>
</body>
</html>

  如上粗体代码所示,页面首先利用@ Register指令将WelcomeLabel控件引入,然后,通过<self:WelcomeLabel>标记具体指示控件的位置,以及属性设置等。在<self:WelcomeLabel>标记中,主要设置了Text、BackColor和ForeColor属性,它们分别用于定义控件的文本内容、背景颜色和前景颜色。

  如图5显示了执行Default.aspx的页面截图。

ASP.NET2.0服务器控件之创建自定义控件(3)

图5 示例应用程序截图

  小结

  本文通过一个简单示例说明了实现自定义服务器控件的基本过程。通过这些内容,读者可能已经发现:创建自定义服务器控件与创建普通Web应用程序之间有着较大区别,这些差别主要体现在创建模式、所利用技术等方面。在随后的系列文章中,将详细探讨利用ASP.NET 2.0技术创建自定义服务器控件的相关内容。

[上一页] [1] [2] [3]

发表评论

爱问(iAsk.com) 相关网页共约502篇。



评论】【论坛】【收藏此页】【 】【多种方式看新闻】【下载点点通】【打印】【关闭




科技时代意见反馈留言板 电话:010-82628888-5595   欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

Copyright © 1996 - 2006 SINA Corporation, All Rights Reserved

新浪公司 版权所有