2012-04-24 32 views
1

我有一个文本框,并包裹在一个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的希望,这将避免它,没了同样的事情。我甚至尝试ASP.net标记,并添加

UseSubmitBehavior=false

而该网页还似乎回发。这是由于它在一个更新面板内?有没有其他解决方法?

+0

你有没有试过'keydown'?当你按下输入按钮时会发生什么? – 2012-04-24 22:37:34

+0

特拉维斯 - 你读过我的文章了吗......当我按下回车键时,它会进入if条件并设置焦点并且可能点击,但它做得太快了,因为它最终会回传。 – oJM86o 2012-04-24 22:40:22

+0

如果你的代码工作正常,那么在输入按钮被按下的情况下你不会输入这个条件。 “当用户释放键盘上的键时,键入事件将发送到元素。”你很可能不得不处理多个事件。但是如果你满足于只是解决方案,那就坚持不听。你读过我的评论吗? – 2012-04-24 22:47:12

回答

2

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

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

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

我的方法能够确保在用户点击该面板内的输入时点击相应的按钮(在UpdatePanel内)。这会根据需要导致异步回发。

这不是黑客,而是ASP.NET 2.0中引入的一项有用功能。你的代码保持可读性,你不需要使用“JavaScript黑客”。

+0

但更新面板是在一个div ...我可以以某种方式重用吗? – oJM86o 2012-04-24 22:36:03

+0

这感觉像一个肮脏的解决方案,但它的工作... – oJM86o 2012-04-24 22:39:11

+0

@ oJM86o:面板将呈现为一个div。所以你可以用面板来替换你的div。 – 2012-04-24 22:39:26

相关问题