快速业务通道

庖丁解牛Asp.net3.5控件和组件开发技术系列—事件和数据回发机制(一)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
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文本标记:

<input type="text" name="KingTextBox1"value="" />

注意到控件的name属性是必要的,因为KingTextBox中就只有一个文本框,所以把主控件的服务端 this.UniqueID赋值给了文本框。并且,在呈现控件时,把定义的Text属性值赋给控件的value属性。在赋值时首先通过 HttpUtility.HtmlEncode(Text)方法把Text值转换一下再赋给控件。这是由于Text是由用户输入的,要避免用户输入 HTML标记的情况,即不管用户输入什么都要当作文

本处理。而HttpUtility.HtmlEncode方法就是将用户输入字符串转换成HTML格式,将用户输入的HTML关键字转义为非HTML关键字字符。

下面来分析一下控件的数据回发部分代码。控件继承IPostBackDataHandler接口,并实现了LoadPostData和RaisePostDataChangedEvent方法。

LoadPostData代码逻辑如下:

/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
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;
}

首先,把控件当前的旧值保存到strOldValue变量中,然后根据Key: this.UniqueID从postCollection(这一点很重要:其存储的值对应控件映射到HTML标记的value属性)中取出文本框的值存放到strNewValue变量中,这样此文本框回发请求的旧值和新值都取到了。下面的if条件语句功能是比较存储到变量中的这两个新旧值,如果两个值不相同,则表示用户修改了文本框的值,则要把strNewValue赋值给

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号