1

问候!

我有一个简单的导航菜单,由一个 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

2 回答 2

5

您是否尝试过使用默认按钮将控件包装在面板中?我知道它适用于文本框

<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>
于 2009-02-06T16:52:40.813 回答
0

好吧,您使用了错误的按钮 ID。

__doPostBack 方法中的 ID 必须是触发器控件的 UniqueID。您说触发器是“GoButton”,但它的 ID 为“btnGoButton”。

服务器无法知道您的“GoButton”实际上是 btnGoButton。

还要记住,名称修改(一种确保控件名称唯一的方法)可能会使 UniqueID 更加混乱。

尝试这样写: __doPostBack('<%# btnGoButton.UniqueID %>', '');

或将其附加到代码隐藏中..

ddlMenu.Attributes.Add("onkeypress", string.Format("__doPostBack('{0}', '');", btnGoButton.UniqueID);

于 2009-05-08T12:15:15.160 回答