2

AJAX UpdatePanel内のフォームに、TextBoxを含むいくつかのコントロールを含む多数のユーザーコントロールがあります。

これらの各ユーザーコントロールは、データ入力フォームのフィールドを構成します。一部のフィールドではAutoPostBackがオンになっており、サーバー側の別のフォームフィールドの値を更新するイベントが発生します。

ただし、部分的なポストバックが返され、計算フィールドが更新されると、フォームのフォーカスが失われます。フォームの最初のフィールドにフォーカスが戻ります。したがって、このフォームはデータ入力にはまったく役に立ちません。

次にフォーカスするフィールドをサーバー側で処理し、ScriptManager.SetFocus()を使用して、フォームで次のUserControlを渡すという回避策を見てきましたが、これをユーザーコントロールで機能させることができません。これはとにかくハックのように感じます、そしてUpdatePanelがこれを単に機能させるだけではないのは残念です。

ASP.NET 4.0、VisualStudio2010を使用します。

4

1 に答える 1

2

わかりました。問題は、updatepanel内にすべてを含めることだと思います。私のアプローチでは、更新が必要なコントロールにのみupdatepanelを使用します(複数のコントロールが必要になる場合があります)。updatepanelにはUpdateMode=Conditionalが必要です。内部のコントロールに影響を与えるコントロールによってのみトリガーされます。ポストバックを実行するコントロールは、更新パネルの外部にある必要があります。すでにテストして正常に動作している例を投稿しています。

<form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
    <div>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <br />
    <asp:TextBox ID="TextBox2" runat="server" AutoPostBack="True" 
                    ontextchanged="TextBox2_TextChanged"></asp:TextBox>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
            </ContentTemplate>
            <Triggers>
            <asp:AsyncPostBackTrigger ControlID="TextBox2" />
            </Triggers>
        </asp:UpdatePanel>
    <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
        <br />
        <asp:TextBox ID="TextBox4" runat="server" AutoPostBack="True" 
            ontextchanged="TextBox4_TextChanged"></asp:TextBox>
        <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
            </ContentTemplate>
            <Triggers>
            <asp:AsyncPostBackTrigger ControlID="TextBox4" />
            </Triggers>
        </asp:UpdatePanel>
        <asp:TextBox ID="TextBox5" runat="server"></asp:TextBox>

ご想像のとおり、TextBox2はLabel1を更新し、Textbox4はLabel2を更新します。

于 2011-01-19T19:51:41.413 に答える