真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ASP.NET中怎么捕獲回傳事件

本篇文章給大家分享的是有關(guān)ASP.NET中怎么捕獲回傳事件,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

成都創(chuàng)新互聯(lián)公司是一家專注于網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),靖安網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:靖安等地區(qū)。靖安做網(wǎng)站價(jià)格咨詢:13518219792

1. 實(shí)現(xiàn)捕獲回傳事件

如果ASP.NET);  }

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

第三,實(shí)現(xiàn)事件屬性結(jié)構(gòu)。

事件屬性結(jié)構(gòu)是一種優(yōu)化的事件實(shí)現(xiàn)方式。在介紹之前,我們首先看看常見(jiàn)的控件事件實(shí)現(xiàn)方式。具體代碼如下所示。

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

在以上代碼中,包括了與事件定義相關(guān)的三個(gè)關(guān)鍵內(nèi)容:一、定義Click事件委托;二、控件類實(shí)現(xiàn)了IPostBackEventHandler接口,其中當(dāng)實(shí)現(xiàn)接口成員方法RaisePostBackEvent過(guò)程中,定義了事件處理程序OnClick;三、實(shí)現(xiàn)OnClick事件處理程序。以上實(shí)現(xiàn)方法簡(jiǎn)單易用,然而卻存在一個(gè)缺點(diǎn),即執(zhí)行效率低。尤其是在一個(gè)類中引發(fā)多個(gè)事件的情況下,將會(huì)增加開銷,浪費(fèi)大量服務(wù)器資源,最終導(dǎo)致運(yùn)行效率降低。

為了解決以上問(wèn)題,下面介紹一種優(yōu)化的事件實(shí)現(xiàn)方式--事件屬性結(jié)構(gòu)。該結(jié)構(gòu)使用System.ComponentModel.EventHandlerList類,這個(gè)類提供一個(gè)簡(jiǎn)單的委托列表。通過(guò)使用該類所提供的相關(guān)方法,開發(fā)人員能夠靈活的操作控件的事件處理程序委托列表。例如,控件中的Click事件,使用事件屬性結(jié)構(gòu)如下:

protected static readonly object EventClick = new object();  public event EventHandler Click{   add {  Events.AddHandler(EventClick,value);  }  remove {   Events.RemoveHandler(EventClick,value);  }  }

在事件屬性結(jié)構(gòu)定義之前,首先需要定義Click事件委托對(duì)象。由于每個(gè)事件僅創(chuàng)建一次,因此,需要聲明為靜態(tài)和只讀的。然后,在屬性結(jié)構(gòu)中通過(guò)AddHandler、RemoveHandler方法操作事件處理程序委托列表。當(dāng)頁(yè)面調(diào)用Click事件時(shí),它向控件的EventHandlerList集合中添加或者刪除處理程序。由于這種實(shí)現(xiàn)方法,在多個(gè)事件的聲明過(guò)程中比普通的實(shí)現(xiàn)方法效率高,因此是非常值得推薦的方法。

另外,在OnClick方法的實(shí)現(xiàn)過(guò)程中,當(dāng)用一個(gè)事件屬性時(shí),必須從EventHandlerList中取回委托,并將其轉(zhuǎn)換成EventHandler的類型。

protected virtual void OnClick(EventArgs e){  EventHandler clickHandler = (EventHandler)Events[EventClick];  if(clickHandler != null) {  clickHandler(this,e);  }  }

請(qǐng)讀者注意:事件屬性結(jié)構(gòu)不適用于VB.NET語(yǔ)言,只能在C#等語(yǔ)言中應(yīng)用。

2. 典型應(yīng)用

實(shí)事求是的講,以上捕獲回傳事件的理論介紹對(duì)于從未實(shí)現(xiàn)過(guò)ASP.NET服務(wù)器控件事件的讀者而言,有些難以理解。為此,本小節(jié)通過(guò)一個(gè)典型的示例來(lái)具體說(shuō)明捕獲回傳事件的實(shí)現(xiàn)方法。

本例實(shí)現(xiàn)了一個(gè)自定義ASP.NET服務(wù)器控件WebCustomControl。該控件雖然呈現(xiàn)為一個(gè)按鈕外觀,但是其并不是從Button類繼承而來(lái)。當(dāng)單擊該按鈕時(shí),控件將引起回傳,服務(wù)器端自動(dòng)捕獲回傳的單擊事件,并且引發(fā)Click事件,執(zhí)行對(duì)應(yīng)事件處理程序。下面是ASP.NET服務(wù)器控件實(shí)現(xiàn)的源代碼代碼:

using System;  using System.Collections.Generic;  using System.ComponentModel;  using System.Text;  using System.Web;  using System.Web.UI;  using System.Web.UI.WebControls;  namespace WebControlLibrary{ [DefaultEvent("Click")]   [ToolboxData("<{0}:WebCustomControl runat=server>")]   public class WebCustomControl : WebControl, IPostBackEventHandler {   // 定義一個(gè)Click事件委托對(duì)象    private static readonly object EventClick = new object();    //實(shí)現(xiàn)Click事件屬性    [Description("Click事件屬性"), Category("Action") ]    public event EventHandler Click {  add {   Events.AddHandler(EventClick, value);  }  remove {    Events.RemoveHandler(EventClick, value);  }   }      // 重寫控件呈現(xiàn)方法RenderContents    protected override void RenderContents(HtmlTextWriter output) {  output.Write(");    }   //實(shí)現(xiàn)事件方法   protected virtual void OnClick(EventArgs e) {  EventHandler clickHandler = (EventHandler)Events[EventClick];   if (clickHandler != null) {   clickHandler(this, e);   }   }   // 實(shí)現(xiàn)IPostBackEventHandler接口成員    void IPostBackEventHandler.RaisePostBackEvent(string eventArgument) {   OnClick(EventArgs.Empty);   }  }  }

在WebCustomControl類中,實(shí)現(xiàn)了以下有關(guān)捕獲回傳事件處理的關(guān)鍵內(nèi)容:

·控件類WebCustomControl實(shí)現(xiàn)IPostBackEventHandler;

·將引發(fā)回傳的控件的name屬性值設(shè)置UniqueID;

·實(shí)現(xiàn)事件屬性結(jié)構(gòu),維護(hù)事件處理程序委托列表;

·在RaisePostBackEvent方法中調(diào)用OnClick方法;

下面的代碼是應(yīng)用自定義按鈕WebCustomControl的Default.aspx源代碼,顯示效果如圖1和圖2所示。

﹤%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %﹥  ﹤%@ Register TagPrefix="cc" Namespace="WebControlLibrary" Assembly="WebControlLibrary" %﹥  ﹤!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"﹥  ﹤script runat="server"﹥    void wcc1_Click(object sender, EventArgs e) {  message.Text = "您剛才點(diǎn)擊了上面的按鈕";    }  ﹤/script﹥  ﹤html xmlns="http://www.w3.org/1999/xhtml"﹥  ﹤head runat="server"﹥  ﹤title﹥捕獲回傳事件﹤/title﹥  ﹤/head﹥  ﹤body﹥   ﹤form id="form1" runat="server"﹥    ﹤center﹥   ﹤cc:WebCustomControl ID="wcc1" runat="server" OnClick="wcc1_Click" /﹥ ﹤br /﹥ ﹤br /﹥  ﹤asp:Label ID="message" runat="server"﹥﹤/asp:Label﹥   ﹤/center﹥  ﹤/form﹥  ﹤/body﹥  ﹤/html﹥

下圖1和圖2是應(yīng)用效果圖。

ASP.NET中怎么捕獲回傳事件

圖1 頁(yè)面初始化效果圖

ASP.NET中怎么捕獲回傳事件

圖2 點(diǎn)擊按鈕后的效果圖

另外,還有一個(gè)與捕獲回傳事件密切相關(guān)的屬性AutoPostBack。該屬性用于控件的自動(dòng)回傳設(shè)置,很多標(biāo)準(zhǔn)的服務(wù)器控件中均包含該屬性。對(duì)于開發(fā)人員來(lái)講,是否需要在自行創(chuàng)建的ASP.NET服務(wù)器控件中定義該屬性是很重要的,需要根據(jù)控件的功能需求認(rèn)真考慮取舍。該屬性的關(guān)鍵代碼實(shí)現(xiàn)如下:

//定義屬性AutoPostBack  public bool AutoPostBack{    set {  this._autoPostBack = value;   }   get {  return this._autoPostBack;   }  }  //在Render方法中添加Page.GetPostBackEventReference()方法  protected override void Render(HtmlTextWriter output){   ......    if(this.AutoPostBack) {   writer.WriteAttribute("ontextchanged","javascript:" + Page.GetPostBackEventReference(this));   }   ......  }

由以上代碼可知,AutoPostBack屬性的實(shí)現(xiàn)重點(diǎn)是Page.GetPostBackEventReference方法的應(yīng)用。該方法獲取對(duì)客戶端腳本函數(shù)的引用,調(diào)用該函數(shù)將使服務(wù)器發(fā)送回該頁(yè),并返回一段表示客戶端事件的字符串,實(shí)際是一些客戶端代碼。當(dāng)AutoPostBack="true"時(shí),ASP.NET服務(wù)器控件將發(fā)生自動(dòng)回傳,而不需通過(guò)Click事件等引發(fā);當(dāng)AutoPostBack="false",則回傳必須經(jīng)過(guò)類似Click的事件引發(fā)。

以上就是ASP.NET中怎么捕獲回傳事件,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享文章:ASP.NET中怎么捕獲回傳事件
網(wǎng)站網(wǎng)址:
http://weahome.cn/article/gochos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部