2011-01-03 2 views
2

TextBox를 포함한 몇 가지 컨트롤이 포함 된 AJAX UpdatePanel 내부 폼에 사용자 컨트롤이 있습니다.UpdatePanel 안에 UserControls가있는 부분 포스트 백에서 포커스가 손실되었습니다.

이러한 각 사용자 정의 컨트롤은 데이터 입력 폼의 필드를 구성합니다. 일부 필드는 AutoPostBack이 켜져 있고 다른 양식 필드 서버 측의 값을 업데이트하는 이벤트를 발생시킵니다.

그러나 부분적인 포스트 백이 반환되고 계산 된 필드가 업데이트되면 양식 포커스가 손실됩니다. 양식의 첫 번째 필드가 포커스를 다시받습니다. 따라서 양식은 데이터 입력에 꽤 쓸모가 없습니다.

서버 쪽에서 다음 필드에 초점을 맞추고 ScriptManager.SetFocus()를 사용하여 양식의 다음 UserControl을 전달하는 해결 방법을 보았지만 내 usercontrols와 함께 작동하지 않습니다. . 어쨌든 여전히 해킹과 같은 느낌이 들며, UpdatePanel이이 작업을 수행하는 것이 아니라는 점에 실망 스럽습니다.

ASP.NET 4.0, 비주얼 스튜디오를 사용하여 2010 년

+0

답변 없음 – tomfanning

답변

2

좋아, 난 당신의 문제는 당신이 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 외부로 이동할 수없는 몇 가지 경우가 있습니다. –

관련 문제