【问题标题】:textbox enter causes postback or redirection?文本框输入导致回发或重定向?
【发布时间】:2012-04-24 22:29:32
【问题描述】:

我在 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

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

【问题讨论】:

  • 你试过'keydown'吗?按住回车键会发生什么?
  • Travis - 你读过我的帖子了吗...当我按下回车键时,它会进入 if 条件并设置焦点,可能会点击,但它执行得如此之快,因为它最终会发布返回。
  • 如果您的代码工作正常,那么您不会在按下回车键的情况下输入该条件。 “当用户释放键盘上的键时,keyup 事件被发送到元素。”您很可能必须处理多个事件。但是,如果您只满足于破解解决方案,那么请坚持不听。你看我的评论了吗?
  • @TravisJ - 我的意思是我进入了正确的位置 - 我知道如何调试我不是傻瓜,我的问题是它仍然发回。

标签: jquery asp.net updatepanel


【解决方案1】:

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

编辑:“问题是为什么这行得通……”

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

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

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

【讨论】:

  • 但是更新面板在一个 div 里面...我可以重用它吗?
  • @oJM86o:面板将呈现为 div。所以你可以用一个面板替换你的 div。
  • @oJM86o:编辑了我的答案以添加解释。 Downvoter:愿意发表评论吗?
猜你喜欢
  • 2014-05-24
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
相关资源
最近更新 更多