zoukankan      html  css  js  c++  java
  • 2 自定义控件之IPostBackDataHandler

    1 IPostBackDataHandler 获取自动加载回发数据而必须实现的方法。

    image

    定义 ASP.NET 服务器控件为自动加载回发数据而必须实现的方法。

      名称 说明
    clip_image002 LoadPostData 当由某个类实现时,它为 ASP.NET 服务器控件处理回发数据。
    clip_image003 RaisePostDataChangedEvent 当由类实现时,它用信号要求服务器控件对象通知 ASP.NET 应用程序该控件的状态已更改。

    2 示例

    2.1 CustomerTextBoxError:此事列演示由于无法获取http 协议post过来的name,value 键值对数据而无法保存控件的状态

    using System;

    using System.Collections.Generic;

    using System.Collections.Specialized;

    using System.Text;

    using System.Web;

    using System.Web.UI;

    namespace AspnetEssential.CustomerControl

    {

    /// <summary>

    /// 自定义CustomerTextBoxError控件

    /// </summary>

    /// <remarks>

    /// 不是现IPostBackDataHandler,没法获取自动post的数据

    /// </remarks>

    public class CustomerTextBoxError:Control

    {

    /// <summary>

    /// 文本改变事件

    /// </summary>

    /// <summary>

    /// 文本

    /// </summary>

    public string Text

    {

    get

    {

    return ViewState["_Text"] as string;

    }

    set

    {

    ViewState["_Text"] = value;

    }

    }

    /// <summary>

    /// 呈现

    /// </summary>

    /// <param name="writer"></param>

    protected override void Render(HtmlTextWriter writer)

    {

    //write html tag <input type='text' name='ClientID' value='Text'></>

    writer.AddAttribute(HtmlTextWriterAttribute.Name , this.ClientID);

    writer.AddAttribute(HtmlTextWriterAttribute.Value, Text);

    writer.RenderBeginTag(HtmlTextWriterTag.Input);

    writer.RenderEndTag();

    }

    }

    }

    2.2 CustomerTextBox:实现IPostBackDataHandler,从而获取post过来的数据,从而可以保留控件的状态,以及引发文本改变事件。

    using System;

    using System.Collections.Generic;

    using System.Collections.Specialized;

    using System.Text;

    using System.Web;

    using System.Web.UI;

    namespace AspnetEssential.CustomerControl

    {

    /// <summary>

    /// 自定义TextBox控件

    /// </summary>

    /// <remarks>

    /// 学习IPostBackDataHandler的使用

    /// </remarks>

    public class CustomerTextBox:Control,IPostBackDataHandler

    {

    /// <summary>

    /// 文本改变事件

    /// </summary>

    public event EventHandler TextChanged;

    /// <summary>

    /// 文本

    /// </summary>

    public string Text

    {

    get

    {

    return ViewState["_Text"] as string;

    }

    set

    {

    ViewState["_Text"] = value;

    }

    }

    #region IPostBackDataHandler 成员

    public bool LoadPostData(string postDataKey, NameValueCollection postCollection)

    {

    string postDataValue=postCollection[postDataKey ];

    if (postDataValue!=null && !postDataValue.Equals(Text))

    {

    Text = postDataValue;

    return true ;

    }

    else

    {

    return false ;

    }

    }

    public void RaisePostDataChangedEvent()

    {

    if(TextChanged!=null)

    {

    EventArgs e=new EventArgs ();

    TextChanged(this, e);

    }

    }

    /// <summary>

    /// 呈现

    /// </summary>

    /// <param name="writer"></param>

    protected override void Render(HtmlTextWriter writer)

    {

    //write html tag <input type='text' name='%ClientID%' value='%Text%'></>

    writer.AddAttribute(HtmlTextWriterAttribute.Name , this.ClientID);

    writer.AddAttribute(HtmlTextWriterAttribute.Value, Text);

    writer.RenderBeginTag(HtmlTextWriterTag.Input);

    writer.RenderEndTag();

    }

    #endregion

    }

    }

    3 实现IPostBackDataHandler 控件

    TextBox, HtmlInputText, CheckBox, HtmlSelect, DropDownList 等

  • 相关阅读:
    LINUX的SSH下FTP到远程服务器Entering Passive Mode失败解决
    LINUX的SSH下FTP到远程服务器Entering Passive Mode失败解决
    LINUX的SSH下FTP到远程服务器Entering Passive Mode失败解决
    git rm简介
    git rm简介
    git rm简介
    linux rz -e
    新版住院电子病历首页 (2012年修订说明)
    DateEdit和TimeEdit用法
    ORA-22868: 具有 LOB 的表包含有位于不同表空间的段
  • 原文地址:https://www.cnblogs.com/hbb0b0/p/1880545.html
Copyright © 2011-2022 走看看