// 重写控件呈现方法RenderContents
protected override void RenderContents(HtmlTextWriter output) {
output.Write("<input type='submit' name=" this.UniqueID " value=请单击 />");
}
//实现事件方法
protected virtual void OnClick(EventArgs e) {
EventHandler clickHandler = (EventHandler)Events[EventClick];
if (clickHandler != null) {
clickHandler(this, e);
}
}
// 实现IPostBackEventHandler接口成员
void IPostBackEventHandler.RaisePostBackEvent(string eventArgument) {
OnClick(EventArgs.Empty);
}
}
}
在WebCustomControl类中,实现了以下有关捕获回传事件处理的关键内容:
·控件类WebCustomControl实现IPostBackEventHandler;
·将引发回传的控件的name属性值设置UniqueID;
·实现事件属性结构,维护事件处理程序委托列表;
·在RaisePostBackEvent方法中调用OnClick方法;
下面的代码是应用自定义按钮WebCustomControl的Default.aspx源代码,显示效果如图1和图2所示。
| <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ Register TagPrefix="cc" Namespace="WebControlLibrary" Assembly="WebControlLibrary" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> void wcc1_Click(object sender, EventArgs e) { message.Text = "您刚才点击了上面的按钮"; } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>捕获回传事件</title> </head> <body> <form id="form1" runat="server"> <center> <cc:WebCustomControl ID="wcc1" runat="server" OnClick="wcc1_Click" /> <br /> <br /> <asp:Label ID="message" runat="server"></asp:Label> </center> </form> </body> </html> |
下图1和图2是应用效果图。
![]() ![]() 图1 页面初始化效果图 图2 点击按钮后的效果图 |
另外,还有一个与捕获回传事件密切相关的属性AutoPostBack。该属性用于控件的自动回传设置,很多标准的服务器控件中均包含该属性。对于开发人员来讲,是否需要在自行创建的服务器控件中定义该属性是很重要的,需要根据控件的功能需求认真考虑取舍。该属性的关键代码实现如下:
| //定义属性AutoPostBack public bool AutoPostBack{ set { this._autoPostBack = value; } get { return this._autoPostBack; } } //在Render方法中添加Page.GetPostBackEventReference()方法 protected override void Render(HtmlTextWriter output){ ...... if(this.AutoPostBack) { writer.WriteAttribute("ontextchanged","javascript:" Page.GetPostBackEventReference(this)); } ...... } |
由以上代码可知,AutoPostBack属性的实现重点是Page.GetPostBackEventReference方法的应用。该方法获取对客户端脚本函数的引用,调用该函数将使服务器发送回该页,并返回一段表示客户端事件的字符串,实际是一些客户端代码。当AutoPostBack="true"时,服务器控件将发生自动回传,而不需通过Click事件等引发;当AutoPostBack="false",则回传必须经过类似Click的事件引发。
以上介绍的是有关捕获回传事件的具体实现方法。总体来讲不是非常复杂,然而,实现捕获回传事件的具体应用非常灵活,远远没有这么简单,这就需要读者不断的实践才能深入理解。
3. 小结
本文首先介绍了利用ASP.NET 2.0技术,为自定义服务器控件实现捕获回传事件的实现方法。通过这些内容,相信读者可以基本掌握实现控件捕获回传事件的方法。在随后的文章中,笔者将继续介绍实现事件处理的另一核心内容--处理回传数据。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!





