庖丁解牛Asp.net3.5控件和组件开发技术系列—事件和数据回发机制(一)
uot;<input type=\"text\" name="); sb.Append("\"" + UniqueID + "\""); sb.Append("value="); //HttpUtility.HtmlEncode 将用户输入字串转换成HTML格式,主要将用 //户输入的HTML关键字转义为非HTML关键字字符 sb.Append("\"" + HttpUtility.HtmlEncode(Text) + "\""); sb.Append(" />"); writer.Write(sb.ToString()); } public virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection) { string strOldValue = Text; string strNewValue = postCollection[this.UniqueID]; if( strOldValue == null || ( strOldValue != null && !strOldValue.Equals (strNewValue))) { this.Text = strNewValue; return true; } return false; } public virtual void RaisePostDataChangedEvent() { OnTextChanged(EventArgs.Empty); } public event EventHandler TextChanged; protected virtual void OnTextChanged(EventArgs e) { if (TextChanged != null) { TextChanged(this, e); } } } 主控件KingTextBox包含一个名称为Text的服务端属性,用来存储控件的显示文本。在后面的Render方法呈现一个HTML文本标记:
注意到控件的name属性是必要的,因为KingTextBox中就只有一个文本框,所以把主控件的服务端 this.UniqueID赋值给了文本框。并且,在呈现控件时,把定义的Text属性值赋给控件的value属性。在赋值时首先通过 HttpUtility.HtmlEncode(Text)方法把Text值转换一下再赋给控件。这是由于Text是由用户输入的,要避免用户输入 HTML标记的情况,即不管用户输入什么都要当作文 本处理。而HttpUtility.HtmlEncode方法就是将用户输入字符串转换成HTML格式,将用户输入的HTML关键字转义为非HTML关键字字符。 下面来分析一下控件的数据回发部分代码。控件继承IPostBackDataHandler接口,并实现了LoadPostData和RaisePostDataChangedEvent方法。 LoadPostData代码逻辑如下:
首先,把控件当前的旧值保存到strOldValue变量中,然后根据Key: this.UniqueID从postCollection(这一点很重要:其存储的值对应控件映射到HTML标记的value属性)中取出文本框的值存放到strNewValue变量中,这样此文本框回发请求的旧值和新值都取到了。下面的if条件语句功能是比较存储到变量中的这两个新旧值,如果两个值不相同,则表示用户修改了文本框的值,则要把strNewValue赋值给 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |