ASP.NET2.0服务器控件之创建自定义控件(2)
ASP.NET2.0服务器控件之创建自定义控件(2)
http://http://www.zjjv.com//.cn 2006年05月22日14:40 天极yesky
(3)编写、编译和测试自定义服务器控件
需要实现的自定义服务器控件WelcomeLabel功能很简单。类似于一个标准Label控件。WelcomeLabel控件从System.Web.UI.WebControls. WebControl继承,其中自定义了一个string类型的Text属性。当控件运行时,将显示Text属性值和当前用户名的组合文字。例如,将Text属性值设置为"您好",那么最终显示的是"您好,某某!"。开发人员可以用WelcomeLabel控件作为站点欢迎页面的一部分。
WelcomeLabel控件的实现代码包含在WebCustomControl1.cs文件中。该文件源代码如下所示。
using System;
using System.Collections.Generic;
using System.Security.Permissions;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace HelloMyControl
{
[
AspNetHostingPermission (SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal ),
AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal ),
DefaultProperty ( "Text" ),
ToolboxData ( "<{0}:WelcomeLabel runat="server" > </{0}:WelcomeLabel>")
]
public class WelcomeLabel : WebControl
{
// 实现Text属性
[
Bindable(true), Category("Appearance"), DefaultValue(""), Description("文本内容."), Localizable(true)
]
public virtual string Text
{
get
{
string s = (string)ViewState["Text"];
return (s == null) ? String.Empty : s;
}
set
{
ViewState["Text"] = value;
}
}
// 重写RenderContents方法
protected override void RenderContents(HtmlTextWriter writer)
{
// 对Text属性值编码,并写入输入流中
writer.WriteEncodedText(Text);
// 判断Web请求是否有效。如果有效,则设置内容,并写入输出流中
if (Context != null)
{
// 获取当前用户名
string s = Context.User.Identity.Name;
// 如果当前用户名不为空,则分析用户名并按照指定格式写入输出流中
if (s != null && s != String.Empty)
{
string[] split = s.Split('');
int n = split.Length - 1;
if (split[n] != String.Empty)
{
writer.Write(",");
writer.Write(split[n]);
}
}
}
writer.Write("!");
}
}
}
代码说明之控件基类:
如果服务器控件需要呈现用户界面(UI)元素或任何其他客户端可见的元素,则应该从System.Web.UI.WebControls.WebControl(或派生类)派生该控件。如果控件要呈现在客户端浏览器中不可见的元素(如隐藏元素或meta元素),则应从System.Web.UI.Control派生该控件。本例显然需要呈现用户界面元素,因此,自定义服务器控件类WelcomeLabel从WebControl基类继承。由于WebControl类从Control派生,因此,WelcomeLabel控件则自动继承基类提供的成员对象,这些对象多数与用户界面元素呈现有关,例如,Font、ForeColor、BackColor、Width等等。另外,同样也是由于从WebControl继承,因此,WelcomeLabel控件还自动实现ASP.NET 2.0新增的主题和皮肤功能。实际上,由于WelcomeLabel控件与ASP.NET 2.0的内置服务器控件Label有着很多相似之处,因此,从功能实现的角度出发,最好的方式应该是使得WelcomeLabel控件类从Label类继承。然而,本例为了说明定义属性和定义属性元数据的实现方法,因此,从WebControl基类继承。
代码说明之Text属性:
如上源代码所示,WelcomeLabel实现了一个Text属性,并使用视图状态存储该属性值。使用视图状态保存回发间的Text值。每次回发时,将重新创建页并从视图状态还原值。如果Text值并未存储在视图状态中,则在每次回发时会将值设置为其默认的Empty。ViewState属性继承自WebControl,是保存数据值的字典。通过使用String键,可输入和检索值。本例中将"Text"用作键。字典中的项被类型化为Object,然后必须将其强制转换为属性类型。
[上一页] [1] [2] [3] [下一页]