日期:2011-03-27 浏览次数:20445 次
PostBack |
// MyControls.cs 自定义控件集 using System; using System.ComponentModel; using System.Web.UI; using System.Web.UI.WebControls; namespace essay { public class myButton:WebControl,IPostBackEventHandler { //定义控件属性Text public virtual string Text { get { string s =(string)ViewState["Text"]; return (s==null)?string.Empty:s; } set {ViewState["Text"]=value;} } //生成控件对应的HTML代码 protected override void Render(HtmlTextWriter writer) { writer.Write("<INPUT TYPE=submit name=" + this.UniqueID + " Value='"+this.Text+"' />"); } //定义Click事件委托 public event EventHandler Click; //把客户端提交映射到自定义的Click事件 void IPostBackEventHandler.RaisePostBackEvent(string eventArgument) { OnClick(EventArgs.Empty); } //实现回调 protected virtual void OnClick(EventArgs e) { if(Click!=null)Click(this,e); } } } |
■ 行李 - 回发数据引发的服务器端事件
"一次,村里一户人家的姑娘要出嫁,姑娘的父亲在上海谋生,托老信客带来两匹红绸。"
除了依赖于用户操作引发事件外,我们时常还需要根据回发的用户数据,来修改相应控件的状态,从而引发事件。
回发的客户端表单数据会被集中整理到包含数据名/值集的一个System.Collections.Specialized.NameValueCollection实例中,页面会利用UniqueID在控件树中寻找匹配控件,如果匹配控件实现接口IpostBackDataHandler,则调用LoadPostData方法更新状态并返回更新标识,RaisePostDataChangedEvent方法检查标识从而引发事件。下例为依赖于状态变化引发事件的自定义控件范例。拓展一下,可以更加灵活地使用这个事件机制,例如当用户输入特定数据时,也可以在此引发特定事件。
using System; using System.Web; using System.Web.UI; using System.Collections.Specialized; namespace essay { public class MyTextBox: Control, IPostBackDataHandler { //定义控件属性Text public String Text { get {return (String) ViewState["Text"];} set {ViewState["Text"] = value;} } //生成控件对应的HTML代码 protected override void Render(HtmlTextWriter output) { writer.Write("<INPUT TYPE=text name=" + this.UniqueID + " Value='"+this.Text+"' />"); } //定义TextChanged事件委托 public event EventHandler TextChanged; //更新控件的Text状态并返回更新标识 //参数N
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|