1

我刚刚创建了一个新页面,并在其上仅放置了 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 对我来说并不容易。

4

2 回答 2

0

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

function ResetDefaultFired()
 {
     __defaultFired = false;
 }

你的客户点击按钮应该是:OnClientClick=”ResetDefaultFired”</p>

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

于 2013-11-26T19:55:53.733 回答
0

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

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

我希望这有帮助!


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

于 2014-03-03T19:18:30.687 回答