2009-05-27 44 views
2


兩種類型的回發事件的

1)我發現了兩個物品,各分類有點不同的兩種類型的回發事件:

一個資源說,兩種類型的回發事件都改變事件(其中對照實施IPostbackDataHandler),其時觸發數據被回發之間改變,並且然後被募集事件(其中對照實施IPostbackEventHandler),這是由服務器控制凸起無論什麼原因,控制認爲合適

其他文章說這兩種類型是即時回覆事件和更改事件。根據這篇文章,即時響應的事件是那些真正觸發回傳


A),它的分類是正確的?

b)若第二條是正確的,那麼如果TextBox控件具有的AutoPostBack =」 true」時,不應該那麼框TextChanged也可考慮即時響應事件?


2)當頁面被提交到服務器,由於一些用戶操作,然後在事件處理階段,ASP.NET引發,進行了自上次回發的數據更改的所有控件的事件。實際上觸發回傳(如Click事件)的事件前次募集


一)但是,如果用戶在GridView的選擇行引起的回傳?當GridView控件導致由於行選擇,然後不像簡單的控件(如文本框或按鈕)回傳,這回發導致的GridView火不是一個,而是事件中的幾個服務器端事件處理階段(SelectedIndexChaning和的SelectedIndexChanged)。

哪個這些GridView的事件是由ASP.NET認爲是造成回傳的人嗎?


謝謝

+0

您指的是哪篇文章? – 2012-02-23 16:55:49

回答

0

SelectedIndexChanging被稱爲第一,通常是在我做任何形式的更新。的SelectedIndexChanged發生SelectedIndexChanging後,所以在技術上的頁面看到SelectedIndexChanging作爲導致回發的事件。請記住,回發也會將從Init到Page_Load的頁面的整個生命週期調用到您的事件中。

autopostback屬性只是讓站點知道在發生任何更改後執行回發,無論是textchanged,selectedindexchanged,checkedchanged等,如果autopostback屬性未設置爲true,則不會發生這些事件。

+1

據我所知,即使autopostback屬性設置爲false,TextChanged,SelectedIndexChanged等事件也會發生,但是一旦頁面被髮回 – PrgGnt 2009-05-27 23:55:46

0

首先,它聽起來好像這兩個類別是否兼容,把它的只是以不同的方式。我想你可以說Raised事件等同於立即響應事件,只有在實現IPostbackEventHandler的控件中才有可能。

所以對於1b,當AutoPostBack = true時,我相信它只是設置了一個javascript onchange事件來進行回發呼叫。回發一旦觸發,頁面就會檢測到文本框已更改並運行已更改的事件。因此,這仍然不是一個凸顯的事件。 (我可能是錯的,但這是我的理解。)

Raise事件將在控件的RaisePostBack方法中觸發(IPostBackEventHandler要求) - 發生在頁面加載循環之後並觸發每個更改事件。

在引擎蓋下,回發可以通過以下兩種方式之一發生:通過提交表單(提交行爲的asp:按鈕)或通過javascript _doPostBack調用(發生在AutoPostBack = true或您撥打電話的控件中直接使用Page.ClientScript)。

1

即使Autopostback屬性爲false,SelectedIndexChanged事件(在列表框上)和TextChanged事件(在文本框上)也會在回發上觸發。

嘗試把這樣的形式:

<asp:ListBox runat="server" ID="test" 
     onselectedindexchanged="test_SelectedIndexChanged"> 
<asp:ListItem >number1</asp:ListItem> 
<asp:ListItem >number2</asp:ListItem>  
</asp:ListBox> 

<asp:TextBox runat="server" ID="text" ontextchanged="text_TextChanged" /> 
<asp:Button runat="server" Text="Click Me" /> 

,這在後面的代碼:

protected void test_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Response.Write("SelectedIndexChanged"); 
    } 

    protected void text_TextChanged(object sender, EventArgs e) 
    { 
     Response.Write("TextChanged"); 
    } 

然後運行它,改變所選擇的項目,輸入一些文字,並按下按鈕 - 兩起事件都是火。您可以使用Reflector查看事件序列。對於文本框,RaisePostDataChangedEvent方法是:

protected virtual void RaisePostDataChangedEvent() 
{ 
    if (this.AutoPostBack && !this.Page.IsPostBackEventControlRegistered) 
    { 
     this.Page.AutoPostBackControl = this; 
     if (this.CausesValidation) 
     { 
      this.Page.Validate(this.ValidationGroup); 
     } 
    } 
    this.OnTextChanged(EventArgs.Empty); 
}