2011-10-20 3 views
1

나는 계단식 드롭 다운 상자를 설치하려고하는데 첫 번째 상자는 두 번째 값이 변경되는 등의 결과를 초래합니다. 나는 몇 가지 같은 마크 업이 : 이것은 그 때마다 제외하고있다계단식 설치에서 첫 번째 드롭 다운을 새로 고치는 이유는 무엇입니까?

protected void Page_Load(object sender, EventArgs e) 
{ 
    populateDDL1(); 
} 

private void populateDDL1() 
{ 
    DDL1.Items.Clear(); 
    // -- populate from SQL 
} 

protected void OnDDL1Change(object sender, EventArgs e) 
{ 
    DDL2.Items.Clear(); 
    // -- populate from SQL 
} 

나는 상자 첫 번째 드롭 다운에서의 값을 클릭

<form id="ddlSelections" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" /> 

    <asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="DDL1" EventName="SelectedIndexChanged" /> 
      <asp:AsyncPostBackTrigger ControlID="DDL2" EventName="SelectedIndexChanged" /> 
     </Triggers> 
     <ContentTemplate> 
      <asp:DropDownList ID="DDL1" OnSelectedIndexChanged="OnDDL1Change" AutoPostBack="true" runat="server" /> 
      <asp:DropDownList ID="DDL2" OnSelectedIndexChanged="OnDDL2Change" AutoPostBack="true" runat="server" /> 
      <asp:DropDownList ID="DDL3" runat="server" /> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</form> 

그리고 내 코드를 숨김이 같은 것입니다 두 번째 드롭 다운 상자가 채워 지지만 첫 번째 드롭 다운 상자의 값이 다시 채워지고 있습니다. 즉 populateDDL1()이 호출되고 있는데 이는 Page_Load이 호출되지 않으면 호출되지 않습니다. 왜 이것이 사실인지 이해하지 못하고 있습니다. 내가 어디로 잘못 가고 있는지에 대한 제안?

답변

2

모든 페이지로드시 첫 번째 드롭 다운 목록을 채 웁니다. 처음로드 할 때만 수행해야합니다. populateDDL1 전화를 if (!IsPostBack)으로 마무리하십시오. 이는 처음으로 페이지를로드 할 때만 채울 수있는 역방향 방법입니다.

테스트하려면이 줄에 중단 점을 Page_Load에 넣습니다.

단지 ajax-y UpdatePanel이기 때문에 서버 측 메소드가 실행되지 않는다는 것을 의미하지는 않습니다.

+0

오, 소년! 그것으로 해결됩니다. 정말 고맙습니다. 7 분 후에 이것을 받아 들일 것입니다 :) – Legend

+0

대단히 환영합니다. 나는이 발로 내 발을 못 박았습니다. – DOK

+0

아하 ... :) 추가 팁을 주셔서 감사합니다. 가서'UpdatePanel'에 대한 개요를 읽었습니다. 이제는 (잘하면) 분명합니다. – Legend

관련 문제