问候!
我有一个简单的导航菜单,包含一个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键时,页面都会回发,但按钮的客户端事件处理程序不会触发。我错过了什么吗?
答案 0 :(得分: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>
答案 1 :(得分:0)
好吧,你使用了错误的按钮ID。
__doPostBack方法中的ID必须是触发器控件的UniqueID。 你说触发器是'GoButton',但它的ID是'btnGoButton'。
服务器无法知道您的'GoButton'实际上是btnGoButton。
还要记住,名称修改(一种确保控件唯一名称的方法)可能会使UniqueID更加混乱。
尝试这样写: __doPostBack('&lt;%#btnGoButton.UniqueID%&gt;','');
或将其附加在codebehind ..
ddlMenu.Attributes.Add(“onkeypress”,string.Format(“__ doPostBack('{0}','');”,btnGoButton.UniqueID);