|
其实原理很简单,就是判断回传过来的数据是否跟原来相等,不相等返回true,则执行RaisePostDataChangeEvent方法。控件的全部代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace HenllyeeControls { [DefaultProperty("Text"), ParseChildren(true,"Text"), DefaultEvent("TextChanged"), ControlBuilder(typeof(HenllyeeTextBuider))] public class HenllyeeText:WebControl,IPostBackDataHandler { Properties#region Properties [PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty), DefaultValue(""), Category("Behavior"), Description("文本内容")] public string Text { get { return this.ViewState["Text"] == null ? String.Empty : (string)this.ViewState["Text"]; } set { this.ViewState["Text"] = value; } } #endregion Events#region Events private static object _objEvent; [Category("Action")] public event EventHandler TextChanged { add { this.Events.AddHandler(_objEvent, value); } remove { this.Events.RemoveHandler(_objEvent, value); } } #endregion Render#region Render protected override HtmlTextWriterTag TagKey { get { return HtmlTextWriterTag.Input; } } protected override void AddAttributesToRender(HtmlTextWriter writer) { base.AddAttributesToRender(writer);
if (Page != null) { Page.VerifyRenderingInServerForm(this); } writer.AddAttribute(HtmlTextWriterAttribute.Type, "text"); writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID); if (!Enabled) { writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "disabled"); } writer.AddAttribute(HtmlTextWriterAttribute.Value, this.Text); } protected override void AddParsedSubObject(object obj) { if (!(obj is Literal)) return; base.AddParsedSubObject(obj); } #endregion IPostBackData#region IPostBackData public bool LoadPostData(string postKey, System.Collections.Specialized.NameValueCollection valueCollection) { string postData = valueCollection[postKey].ToString(); string strText = this.Text; if (strText.Equals(postData, StringComparison.Ordinal)) return false; this.Text = postData; return true; } public void RaisePostDataChangedEvent() { EventHandler handler = (EventHandler)Events[_objEvent]; if (handler != null) { handler(this, EventArgs.Empty); } } #endregion } public class HenllyeeTextBuider : ControlBuilder { public override bool AllowWhitespaceLiterals() { return false; } public override bool HtmlDecodeLiterals() { return true; } } }
我们新建一个页面中,添加刚才的控件,跟一个Button可是发现能支持数据回传了。
|