1

我在 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 条件,因此它知道已单击输入。然后我希望将焦点设置在按钮上,然后让它单击按钮,就像普通最终用户单击按钮一样。没有似乎回帖。

我尝试添加:

event.preventDefault();
return false;

在 jquery 中希望这会避免它,不是同样的事情。我什至尝试了 ASP.net 标记并添加了

UseSubmitBehavior=false

该页面似乎仍在回发。这是因为它位于更新面板中吗?有没有其他办法解决这个问题??

4

1 回答 1

2

您可以尝试将UpdatePanela 的内容包装起来Panel并将其DefaultButton属性设置为btnAddLineItem.

编辑:“问题是为什么这个工作......”

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

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

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

于 2012-04-24T22:34:55.070 回答