我刚刚创建了一个新页面,并且只放置了4个基本控件:
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Panel ID="Panel1" runat="server" DefaultButton="Button1">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1"
runat="server" Text="Button" />
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
然后加载页面并执行以下步骤:
点击文本框
按ENTER键 - 这将导致单击按钮,因为它是面板的默认按钮
点击文本框中的
再次按ENTER键
此时我无法在文本框中输入任何内容。
我认为它必须与Panel.DefaultButton创建的keypress处理程序有关。例如,如果它总是返回false,那么将使得所有击键都被忽略。
仅在兼容模式下,IE8才会发生这种情况。在兼容模式下,Chrome,FireFox和IE8可以正常工作。
这似乎是开发人员会做的常见事情,在更新面板中有一个文本框和按钮,默认按钮设置......但是,我还没有找到很多讨论这个问题的主题,而且没有一个解决方案看起来很健壮。我不会想到一些如此基本的东西,我需要求助于黑客,比如有一个计时器,将焦点转移到另一个控件,然后再回来。
有没有人对此有一个强大的修复?我正在使用ASP.NET 3.5,但我现在不容易升级到4.0。
答案 0 :(得分:0)
实际上问题是asp.net实现默认按钮处理程序的方式,作为一种解决方法,您需要将以下JS方法添加到您的aspx页面:
function ResetDefaultFired()
{
__defaultFired = false;
}
并且您的客户端点击按钮应为:OnClientClick =“ResetDefaultFired”
此方法重置内部使用的__defaultFired标志,以避免在默认按钮处理程序中执行多次单击。有关进一步的exaplanation检查: http://claytonj.wordpress.com/2008/07/07/update-panel-and-default-button-fix/
答案 1 :(得分:0)
我在几个浏览器中多次遇到过这个问题。通常适用于我的解决方案是将ScriptManager
的{{1}}属性设置为EnablePartialRendering
:
false
我希望这有帮助!
祝你好运,编码愉快! :)