2011-02-01 65 views
2

我已經在aspx頁面中分別放置了選定索引已更改和文本已更改事件的列表框和文本框。現在,如果我在文本框中編寫了某些內容,然後在其他地方單擊選擇列表框中的某個值,則會調用文本框的第一個Text Changed事件,然後調用列表框的選定Index Change事件。之後,再次文本框的文本更改事件被稱爲。任何機構可以給出一些見解,爲什麼會發生這種情況?ASP.Net:調用文本框的文本更改事件序列的問題

下面是標記:

<asp:ListBox ID="ListBox1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ListBox_IndexChanged"> 
    <asp:ListItem Text="abc" /> 
    <asp:ListItem Text="def" /> 
</asp:ListBox> 
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" OnTextChanged="Text_Changed" /> 

後面的代碼:

namespace WebApplication1 
{ 
    public partial class _Default : System.Web.UI.Page 
    {    
     protected void ListBox_IndexChanged(object sender, EventArgs e) 
     { 

     } 

     protected void Text_Changed(object sender, EventArgs e) 
     { 

     } 
    } 
} 
+0

確定嗎?我試着運行這個確切的代碼,首先觸發ListBox_IndexChanged事件,然後是Text_Changed事件(並且只有一次)。 – Pandincus 2011-03-22 01:40:53

+0

啊,我明白了。當我用IE而不是Chrome測試它時,順序就像你說的那樣。 – Pandincus 2011-03-22 01:49:13

回答

1

問題在於AutoPostBack的工作方式是將JavaScript事件附加到您的控件。每個瀏覽器處理JavaScript的方式有點不同,所以沒有真正的保證排序。

當我嘗試在谷歌瀏覽器你的代碼,例如,下列事件順序發生:

  1. 請求發送到服務器
    1. ListBox_IndexChanged事件被稱爲
    2. Text_Changed事件被調用
  2. 回覆客戶回覆

然而,在Internet Explorer 8中,我注意到以下順序:

  1. 請求發送到服務器
    1. Text_Changed事件被稱爲
  2. 響應回到客戶端
  3. 另請參見請求發送到服務器
    1. ListBox_IndexChanged事件被稱爲
    2. Text_Changed事件被稱爲
  4. 第二反應追溯到客戶

這不是ASP.NET的故障,但只是不同的JavaScript實現我想,跨瀏覽器。

如果您需要依賴特定的事件序列,AutoPostBack不會削減它。根據您的情況,我可能會考慮使用符合跨瀏覽器的庫如jQuery來實現我自己的JavaScript事件。您可以通過使用__doPostBack()函數以編程方式回調服務器。

0

當一個新項目選擇在列表框中的文本部分的文本替換爲項目的文本。這就是爲什麼你會得到第二個TextChanged事件。