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

时间:2012-11-09 22:32:12

标签: asp.net ajax updatepanel

我刚刚创建了一个新页面,并且只放置了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键

  5. 此时我无法在文本框中输入任何内容。

    我认为它必须与Panel.DefaultButton创建的keypress处理程序有关。例如,如果它总是返回false,那么将使得所有击键都被忽略。

    仅在兼容模式下,IE8才会发生这种情况。在兼容模式下,Chrome,FireFox和IE8可以正常工作。

    这似乎是开发人员会做的常见事情,在更新面板中有一个文本框和按钮,默认按钮设置......但是,我还没有找到很多讨论这个问题的主题,而且没有一个解决方案看起来很健壮。我不会想到一些如此基本的东西,我需要求助于黑客,比如有一个计时器,将焦点转移到另一个控件,然后再回来。

    有没有人对此有一个强大的修复?我正在使用ASP.NET 3.5,但我现在不容易升级到4.0。

2 个答案:

答案 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

我希望这有帮助!


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