设置了 Panel.DefaultButton 的 UpdatePanel,在 IE8 中回发后无法在文本框中键入



我刚刚创建了一个新页面,仅在其上放置了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>

然后加载页面并执行以下步骤:

  1. 单击文本框中

  2. 按Enter键 - 这将导致按钮单击,因为它是面板的默认按钮

  3. 单击文本框中

  4. 再次按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/

我在几个浏览器中遇到了多次此问题。通常对我有用的解决方案是将ScriptManagerEnablePartialRendering属性设置为false

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="false"></asp:ScriptManager>

我希望这会有所帮助!


祝你好运,编码愉快!:)

最新更新