我刚刚创建了一个新页面,仅在其上放置了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。
实际上问题是ASP.NET实现默认按钮处理程序的方法,作为解决方法,您需要将以下JS方法添加到ASPX页面:
function ResetDefaultFired()
{
__defaultFired = false;
}
,您的客户端单击按钮应该是:onclientClick =" resetDefaultFired"
此方法重置__ defaultfired标志,该标志可避免在默认按钮处理程序中多点击执行。http://claytonj.wordpress.com/2008/07/07/update-panel-and-default-button-fix/
我在几个浏览器中遇到了多次此问题。通常对我有用的解决方案是将ScriptManager
的EnablePartialRendering
属性设置为false
:
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="false"></asp:ScriptManager>
我希望这会有所帮助!
祝你好运,编码愉快!:)