2009-02-06 85 views
0

問候!DropDownList在ENTER按鍵上回傳不會觸發服務器端事件

我有一個簡單的導航菜單,包括一個asp:DropDownList和一個asp:按鈕。用戶從下拉列表中選擇一個項目,然後點擊按鈕轉到新的URL。我希望能夠支持用戶在選擇下拉列表項時按ENTER鍵,以便它複製行爲,就好像他們點擊了按鈕一樣。

這裏是我迄今:

<asp:DropDownList ID="ddlMenu" 
        runat="server" 
        onkeypress="if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {__doPostBack('GoButton',''); return false;}" /> 

<asp:Button ID="btnGoButton" runat="server" onclick="GoButton_Click"/> 

按鈕的點擊代碼:

protected void GoButton_Click(object sender, EventArgs e) 
{ 
    string l_url = ddlMenu.SelectedItem.Value; 
    Response.Redirect(l_url); 
} 

然而,每次我敲回車鍵,頁面回,但按鈕的客戶端事件處理不開火。我錯過了什麼嗎?

回答

4

你有沒有試過用默認按鈕包裝你的控制面板?我知道它適用於文本框

<asp:Panel runat="server" id="searchPanel" DefaultButton="btnGoButton"> 
    <asp:DropDownList ID="ddlMenu" runat="server" /> 
    <asp:Button ID="btnGoButton" runat="server" onclick="GoButton_Click"/> 
</asp:Panel> 
+0

這很容易。謝謝:) – Bullines 2009-02-06 16:55:53

0

那麼,你正在使用錯誤的按鈕ID。

__doPostBack方法中的ID必須是觸發器控件的UniqueID。 你說的觸發器是'GoButton',但它有ID'btnGoButton'。

服務器無法知道您的'GoButton'實際上是btnGoButton。

還要記住名稱修改(確保控件的唯一名稱的方法)可能會使UniqueID更加混亂。

嘗試像這樣寫: __doPostBack('<%#btnGoButton.UniqueID%>','');

或代碼隱藏其追加..

ddlMenu.Attributes.Add( 「onkeypress事件」,的String.Format( 「__ doPostBack( '{0}', '');」,btnGoButton.UniqueID);

相關問題