2009-02-06 2 views
0

Приветствую!DropDownList Postback on ENTER Keypress Не запускает серверное событие

У меня есть простое меню навигации, состоящее из asp: DropDownList и asp: Button. Пользователи выбирают элемент из раскрывающегося списка и нажимают кнопку, чтобы перейти к новому 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); 
} 

Однако, каждый раз, когда я ударил кнопку ENTER, посты страницы назад, но клиент обработчик события кнопки не срабатывает. Я что-то упускаю?

ответ

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

+0

Просто эта же проблема очень помогла мне. –

0

Ну, вы используете неправильный идентификатор кнопки.

Идентификатор в методе __doPostBack должен быть уникальным идентификатором триггерного управления. Вы говорите, что триггер - это «GoButton», но он имеет идентификатор «btnGoButton».

Сервер не знает, что ваш «GoButton» на самом деле является btnGoButton.

Также помните, что название mangling (метод обеспечения уникальных имен для элементов управления) может еще больше испортить UniqueID.

Попробуйте написать вот так: __doPostBack ('<% # btnGoButton.UniqueID%>', '');

или добавить его в коде ..

ddlMenu.Attributes.Add ("OnKeyPress", String.Format ("__ doPostBack ('{0}', '');", btnGoButton.UniqueID);