2011-01-03 48 views
2

AJAX UpdatePanel内のフォームに複数のユーザーコントロールがあり、TextBoxを含むいくつかのコントロールが含まれています。UpdatePanel内のUserControlsでフォーカスが失われました

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

ただし、部分ポストバックが返され、計算フィールドが更新されると、フォームのフォーカスが失われます。フォームの最初のフィールドにフォーカスが戻されます。したがって、フォームはデータ入力には無用です。

私は、次のUserControlをフォームに渡して、ScriptManager.SetFocus()を使用して、次のフィールドに焦点を当てるサーバー側のフィールドを調べることを含む回避策を見ましたが、これを私のusercontrols 。これはまだ何とかハックのように感じられ、UpdatePanelがこの作業を行うだけではないことは残念です。

ASP.NET 4.0は、Visual Studioを使用して、2010年

+0

回答がありません。 – tomfanning

答えて

2

[OK]を、私はあなたの問題はあなたがのUpdatePanel内のすべてのものを含めていることだと思い、私のアプローチは、更新する必要があるコントロールにupdatepanels用いることであろう(複数の場合があります)、UpdatePanelにはUpdateMode = Conditionalがあり、内部のコントロールに影響を与えるコントロールによってのみ起動されます。ポストバックを行うコントロールはupdatepanelの外になければなりません。私はすでにテストし、うまく動作しています。

<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を更新します。

+0

素晴らしいですが、これを後で試してみましょう。 – tomfanning

+0

ありがとう、これは多くの助けになります。どうやら別の更新パネルでそれらを分割するほうが効果的です。 – Cerveser

+1

これは回避策ですが、更新コントロールがUpdatePanelになければならない場合は、この問題は解決しません。これは設計上の理由やページの仕組みに過ぎませんが、子がトリガーで、UpdatePanelの外に移動することができない場合がいくつかあります。 –

関連する問題