自定义控件学习笔记(五)

来源:互联网 发布:电视直播软件哪个清晰 编辑:程序博客网 时间:2024/06/10 05:30

自定义控件学习笔记(五)--比较客户提交数据和之前数据

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(
thisnew 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>

 

后台:

 

protected void C1_TextChanged(object sender, EventArgs e)
    
{
        Response.Write(
"Text has chaged");
    }
原创粉丝点击