2012-09-23 142 views
1

我有一個產品下拉列表,一個顯示有序產品的網格視圖和一個按鈕,用於將所選產品從下拉列表添加到網格視圖。服務器端事件非常火災

當有人點擊添加新產品按鈕時,我的服務器端點擊處理程序只會觸發一些時間,並且不會觸發其他時間。可能是什麼問題呢?

private void AddNewProductToGridView() 
    { 
     if (lstProducts.SelectedIndex < 0) return; 

     Response.Write("Selected Index: " + lstProducts.SelectedValue + 
      "<br />Selected Text: " + lstProducts.SelectedItem.Text + 
      "<br />Selected Value: " + lstProducts.SelectedValue); 
    } 

    protected void btnAddProduct_Click(object sender, EventArgs e) 
    { 
     AddNewProductToGridView(); 
    } 

更新 好後,馬上我張貼的問題,該按鈕的服務器端Click事件每次啓動時間一般射擊。 :D

但是,還有另一個問題。我也有一個數量的文本框。我希望該按鈕作爲頁面的默認按鈕,即當用戶輸入數量並按下回車鍵時,必須調用相同的服務器端方法AddNewProductToGridView

所以,我的文本框的AutoPostBack屬性設置爲True並添加文本框的,像這樣的文本改變事件的事件處理程序:

protected void txtQuantity_TextChanged(object sender, EventArgs e) 
    { 
     AddNewProductToGridView(); 
    } 

關於這個我肯定這個事件處理程序除了我第一次啓動應用程序以外,不會發生火災。

更高版本的更新

我想我找到了解決我的問題,並學到新的東西。

顧名思義,TextBox服務器端控件的Text_Changed事件如果TextBox的Text屬性自上次回發後沒有更改,則不會觸發。因此作爲觸發回傳的手段是不可靠的。

+0

發佈關於按鈕的aspx。 –

+0

我可以肯定地告訴你,'TextChanged'事件非常可靠地觸發。你如何處理事件處理程序?你一定錯過了那裏的東西。 – nunespascal

+0

你說的很對,只有文本發生變化時纔會觸發'TextChanged'。值得注意的是,無論是否有回傳(例如發生回傳,Asp.Net將當前值與先前值進行比較並決定是否應提高事件)。 – Basic

回答

0

如果你想提交輸入鍵的文本框更改,你可以簡單地使用<form>,該按鈕將是一個提交按鈕。默認情況下,它會在按下Enter鍵時提交。

1

我也有一個數量的文本框。我想是該按鈕充當頁面的默認按鈕

只需指定默認按鈕爲<form>這樣,這是這個按鈕,而不是「最終」一個,最終將提交表單(如果有一個):

<form defaultbutton="btnAddProduct"> 
    ... 
</form> 

有沒有歧視,這裏哪個TextBox,或其他輸入,將導致在命中進入提交,雖然。

+0

+1的答案和歡鬧的名字;-) – Luftwaffe