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が作成するkeypressハンドラーと関係があるに違いないと思います。たとえば、常にfalseを返す場合は、すべてのキーストロークが無視されるようになります。

これは、互換モードでない場合にのみIE8で発生します。互換モードのChrome、FireFox、IE8で正常に動作します。

これは、開発者が行う一般的なことのようです。更新パネル内にテキストボックスとボタンがあり、デフォルトのボタンが設定されています...それでも、この問題について説明しているトピックはあまり多くありません。すべて。フォーカスを別のコントロールに変更してから元に戻すタイマーを設定するなどのハックに頼る必要があるほど基本的なことは考えていません。

誰かがこれに対する強力な修正を持っていますか? ASP.NET 3.5を使用していますが、現在4.0にアップグレードするのは簡単ではありません。

4

2 に答える 2

0

いくつかのブラウザーでこの問題に何度か遭遇しました。通常、私にとってうまくいく解決策は、ScriptManagerEnablePartialRendering属性をfalse次のように設定することです。

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

これが役立つことを願っています!


幸運を祈ります。コーディングをお楽しみください。:)

于 2014-03-03T19:18:30.687 に答える
0

実際の問題は、asp.net がデフォルトのボタン ハンドラーを実装する方法です。回避策として、次の JS メソッドを aspx ページに追加する必要があります。

function ResetDefaultFired()
 {
     __defaultFired = false;
 }

ボタンのクライアント クリックは次のようになります: OnClientClick="ResetDefaultFired"</p>

このメソッドは、デフォルトのボタン ハンドラーでの複数回のクリックの実行を回避するために内部的に使用される __defaultFired フラグをリセットします 。ボタン留め/

于 2013-11-26T19:55:53.733 に答える