【问题标题】:UpdatePanel with Panel.DefaultButton set, can't type in textbox after postback in IE8设置了 Panel.DefaultButton 的 UpdatePanel,在 IE8 中回发后无法在文本框中输入
【发布时间】:2012-11-09 22:32:11
【问题描述】:

我刚刚创建了一个新页面,并在其上仅放置了 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 创建的按键处理程序有关。例如,如果它总是返回 false,那么所有击键都会被忽略。

这仅在 IE8 不处于兼容模式时才会发生。在兼容模式下在 Chrome、FireFox 和 IE8 中运行良好。

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

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

【问题讨论】:

  • 添加 OnClientClick="this.focus();"按钮解决了这个问题,但我会等着看是否有人有更好的答案和/或更多信息,然后再将其发布为我的答案。当按钮没有焦点时,IE8 可能存在一些与生成按钮单击事件相关的错误。或者也许是 ASP.NET/IE8 特定的。

标签: asp.net ajax updatepanel


【解决方案1】:

实际上问题在于asp.net实现默认按钮处理程序的方式,作为一种解决方法,您需要将以下JS方法添加到您的aspx页面:

function ResetDefaultFired()
 {
     __defaultFired = false;
 }

您的客户端点击按钮应该是:OnClientClick=”ResetDefaultFired”

此方法重置内部使用的 __defaultFired 标志,以避免在默认按钮处理程序中执行多次单击。进一步解释检查: http://claytonj.wordpress.com/2008/07/07/update-panel-and-default-button-fix/

【讨论】:

    【解决方案2】:

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

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

    我希望这会有所帮助!


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

    【讨论】:

    • 我知道这是一个旧帖子,但这不会禁用异步 AJAX UpdatePanel 更新吗?
    • @Sam - 你是对的,但我会通过改写它来澄清它禁用了在 UpdatePanels 中异步更新页面部分的能力。除此之外,OP 中的问题是在 PostBack 之后出现的。我相信我发布了这个答案,因为通常应该避免混合 AJAX 表单和回发。无论如何,我应该将该警告作为披露。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    相关资源
    最近更新 更多