程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET2.0服務器控件之捕獲回傳事件

ASP.NET2.0服務器控件之捕獲回傳事件

編輯:關於ASP.NET

上一篇文章介紹了實現自定義服務器控件事件的基本概念。本文將通過典型示例講解捕獲回傳事件的實現方法。

1. 實現捕獲回傳事件

如果服務器控件需要捕獲來自客戶端的回傳事件,並想為該回傳事件自定義服務器端事件處理邏輯,那麼控件必須實現System.Web.UI.IPostBackEventHandler接口。下面列舉了該接口定義。

public interface IPostBackEventHandler
{
 void RaisePostBackEvent(string eventArgument);
}

如上代碼所示,IPostBackEventHandler接口僅包括一個成員方法RaisePostBackEvent。該方法使服務器控件能夠處理將窗體發送到服務器時引發的事件,其參數eventArgument表示要傳遞到事件處理程序的可選事件參數。開發人員可以在RaisePostBackEvent方法中實現服務器控件回傳過程中執行的邏輯。一般情況下,RaisePostBackEvent方法將引發一個或者多個服務器端事件。以下代碼片段顯示了在服務器上引發Click事件的RaisePostBackEvent實現。

public void RaisePostBackEvent(String eventArgument)
{
 OnClick(EventArgs.Empty);
}

實現捕獲回傳事件並不是僅僅使服務器控件類實現IPostBackEventHandler接口,並實現該接口成員方法就可以的。開發人員還需要注意實現其他內容。下面列舉了實現捕獲回傳事件過程中的三個要點。

第一,也是最重要的,即自定義服務器控件類必須實現IPostBackEventHandler接口,並實現該接口成員RaisePostBackEvent方法。這一過程在上文中已經進行了介紹。

第二,為控件分配UniqueID。

定義引起回傳事件的控件的name屬性值為UniqueID,是正確實現RaisePostBackEvent方法的關鍵之一。當引發回傳後,頁框架就會搜索發送的內容,並確定發送對象的名稱是否與實現IPostBackEventHandler的服務器控件的UniqueID對應。如果對應,頁框架就會在該控件上調用RaisePostBackEvent方法。這裡的重點是需要開發人員在呈現邏輯中,為控件的name屬性分配UniqueID。下面列舉了一個簡單的代碼示例。

protected override void Render(HtmlTextWriter output)
{
 output.Write("<INPUT TYPE=submit name="+this.UniqueID+"Value='Click Me' />");
}

如上代碼所示,在控件呈現方法Render中,呈現了一個按鈕,其name屬性值為UniqueID。只有為引起回傳的控件的name屬性分配了UniqueID,才能夠正確實現捕獲回傳事件。

第三,實現事件屬性結構。

事件屬性結構是一種優化的事件實現方式。在介紹之前,我們首先看看常見的控件事件實現方式。具體代碼如下所示。

......
public class WebCustomControl:WebControl,IPostBackEventHandler{
 //聲明Click事件委托
 public event EventHandler Click;
 //實現RaisePostBackEvent方法
 void IPostBackEventHandler.RaisePostBackEvent(string eventArgument) {
  OnClick(EventArgs.Empty);
 }
 //定義OnClick事件處理程序
 protected virtual void OnClick(EventArgs e) {
  if(Click != null) { Click(this,e); }
 }
 ......
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved