自定义控件学习笔记(五)--比较客户提交数据和之前数据
1。要点
1)重写RaisePostDataChangedEvent方法
2)当LoadPostData返回true的时候触发RaisePostDataChangedEvent
3)在RaisePostDataChangedEvent里写当LoadPostData为true的时候,应该如何应对客户
2。控件
using System;
using System.Web.UI;
using System.Collections.Specialized;
namespace TestCustomControl
... {
public class CompareDataChange : Control, IPostBackDataHandler
...{
public string Text
...{
get
...{
if (ViewState["myText"] != null)
...{
string text = (string)ViewState["myText"];
return text;
}
else
...{
return "";
}
}
set ...{ ViewState["myText"] = value; }
}
public event EventHandler TextChanged;
protected override void Render(HtmlTextWriter writer)
...{
writer.WriteBeginTag("input");
writer.WriteAttribute("name", UniqueID);
if (ID != null)
...{
writer.WriteAttribute("id", ClientID);
}
if (Text.Length > 0)
...{
writer.WriteAttribute("value", Text);
}
writer.Write(HtmlTextWriter.TagRightChar);
writer.WriteEndTag("input");
}
public bool LoadPostData(string postDataKey, NameValueCollection postCollection)
...{
//先用户修改文字并回传后,text被修改(Render)之前引发此事件。
//流程:render-》显示-》用户修改-》LoadPostData-》(RaisePostDataChangedEvent)-》Render(第二次)
string temp = Text;
Text = postCollection[postDataKey];
if (temp != Text)
return true;//引发RaisePostDataChangedEvent
else
return false;
}
public void RaisePostDataChangedEvent()
...{
if (TextChanged != null)//指客户端使用控件时候,写入了 (OnTextChanged="MethodName"),否则则认为用户没有处理此事件
...{
TextChanged(this, new EventArgs());
}
}
}
}
3。用法
前台:
![]()
<% ... @ Page Language="C#" AutoEventWireup="true" CodeFile="CompareDataChange.aspx.cs" Inherits="TestCustomControl_First_CompareDataChange" %>
<% ... @ Register Assembly="CompareDataChange" TagPrefix="Surance" Namespace="TestCustomControl" %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head runat ="server" >
< title > 无标题页 </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< div >
< Surance:CompareDataChange ID ="C1" runat ="server" Text ="Type Something Differnt" OnTextChanged ="C1_TextChanged" />
< asp:Button ID ="Button1" runat ="server" Text ="Click" /></ div >
</ form >
</ body >
</ html >
后台:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)