首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 伺服器控件開發(三)——事件與回傳資料處理

     編輯:關於ASP.NET

實作 IPostBackDataHandler 處理回傳資料與事件

回傳兩類資訊

  1. 回傳事件: Button 等觸發伺服器端事件。
  2. 回傳資料: 表單欄位值傳遞給 TextBox 等控件。

Page_Load 中的 IsPostBack 機制

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack) { /* 首次載入初始化 */ }
}

IsPostBack 指示頁面是否因用戶回傳而載入,避免重複初始化。

自訂文字框處理回傳資料

繼承 WebControl 並實作 IPostBackDataHandler:

public class NewTextBox : WebControl, IPostBackDataHandler
{
    public event EventHandler TextChanged;

    public string ViewText
    {
        get { return ViewState["Text"]?.ToString() ?? String.Empty; }
        set { ViewState["Text"] = value; }
    }

    protected override HtmlTextWriterTag TagKey => HtmlTextWriterTag.Input;

    protected override void AddAttributesToRender(HtmlTextWriter writer)
    {
        writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
        writer.AddAttribute(HtmlTextWriterAttribute.Value, ViewText);
        writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
        base.AddAttributesToRender(writer);
    }

    // IPostBackDataHandler 實作
    public bool LoadPostData(string postDataKey, NameValueCollection postCollection)
    {
        string posted = postCollection[postDataKey];
        if (posted != ViewText)
        {
            ViewText = posted;
            return true; // 資料異動,引發 RaisePostDataChangedEvent
        }
        return false;
    }

    public void RaisePostDataChangedEvent()
    {
        OnTextChanged(EventArgs.Empty);
    }

    protected virtual void OnTextChanged(EventArgs e)
    {
        TextChanged?.Invoke(this, e);
    }
}

流程總結

  1. 瀏覽器提交表單,ASP.NET 執行期呼叫 LoadPostData,比對舊值。
  2. 若回傳 true,頁面稍後呼叫 RaisePostDataChangedEvent,觸發 TextChanged 事件。
  3. 開發者可在頁面訂閱 TextChanged 執行商業邏輯。

掌握此介面,即可開發支援 ViewState 與回傳資料同步的自訂輸入控件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved