我在asp.net中有一个文本框和一个按钮,包含在更新面板中,如下所示:
<asp:UpdatePanel ID="UpdatePanel21" runat="server" UpdateMode="Always" >
<ContentTemplate>
<asp:TextBox ID="txtLIDescription" runat="server" Columns="50">
</asp:TextBox>
<asp:Button ID="btnAddLineItem" runat="server" onclick="btnAddLineItem_Click"
Text="Add" ToolTip="Add line item." UseSubmitBehavior="false" />
</ContentTemplate>
</asp:UpdatePanel>
如果我点击按钮,一切都按预期工作。但是当我按下回车键(我认为我的用户会这样做)时,系统似乎回复了一下。我试图使用jquery来避免它:
$('#LineItemContent_txtLIDescription')
.livequery('keyup', function (event) {
if (event.keyCode == 13) {
$('#LineItemContent_btnAddLineItem').focus();
$('#LineItemContent_btnAddLineItem').click();
}
$("#LineItemContent_btnAddLineItem").button();
});
如果我放置alert("hello world");
我看到它已进入if条件,因此它知道已经点击了一个输入。然后我希望将焦点设置到按钮然后单击按钮,就像常规最终用户单击按钮一样。 Nope似乎回复了。
我尝试添加:
event.preventDefault();
return false;
在希望避免它的jquery中,nope同样的事情。我甚至尝试过ASP.net标记并添加了
UseSubmitBehavior=false
该页面似乎仍在回复。这是因为它在更新面板内吗?还有其他方法吗?
答案 0 :(得分:2)
您可以尝试将UpdatePanel
的内容包含在Panel
中,并将其DefaultButton
属性设置为btnAddLineItem
。
修改:“问题是为什么这样做......”
首先是您的问题的原因:当您按下回车键时,单击窗体中的第一个按钮不是特定于ASP.NET,这是正常行为。但是,只有在导致回发的控件位于UpdatePanel内时,UpdatePanel才会执行异步回发。否则,您需要为该控件明确指定AsyncPostBackTrigger
。
我的方法有效,因为它确保在用户单击该Panel内部时输入相应的按钮(在UpdatePanel内)。这会导致所需的异步回发。
这不是hack,而是ASP.NET 2.0中引入的有用功能。您的代码保持可读性,您不需要使用“javascript hacks”。