文本框输入导致回发或重定向?

时间:2012-04-24 22:29:33

标签: jquery asp.net updatepanel

我在asp.net中有一个文本框和一个按钮,包含在更新面板中,如下所示:

 <asp:UpdatePanel ID="UpdatePanel21" runat="server" UpdateMode="Always" >
             <ContentTemplate>
                <asp:TextBox ID="txtLIDescription" runat="server" Columns="50">
                </asp:TextBox>
                 &nbsp;<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

该页面似乎仍在回复。这是因为它在更新面板内吗?还有其他方法吗?

1 个答案:

答案 0 :(得分:2)

您可以尝试将UpdatePanel的内容包含在Panel中,并将其DefaultButton属性设置为btnAddLineItem

修改:“问题是为什么这样做......”

首先是您的问题的原因:当您按下回车键时,单击窗体中的第一个按钮不是特定于ASP.NET,这是正常行为。但是,只有在导致回发的控件位于UpdatePanel内时,UpdatePanel才会执行异步回发。否则,您需要为该控件明确指定AsyncPostBackTrigger

我的方法有效,因为它确保在用户单击该Panel内部时输入相应的按钮(在UpdatePanel内)。这会导致所需的异步回发。

这不是hack,而是ASP.NET 2.0中引入的有用功能。您的代码保持可读性,您不需要使用“javascript hacks”。