2013-12-11 2 views
4

ascx User Control의 형태로 하위 레이아웃을 준비한 sitecore proejct가 있습니다. 이 사용자 정의 컨트롤에서 계단식 드롭 다운을 설정하고 UpdatePanel이 무엇을 기반으로하는지 알아야합니다. 문제는 UpdatePanel이 전체 ​​컨트롤을 새로 고치는 것 같아서 올바른 동작이라고 생각하지 않습니다.ascx의 Updatepanel이 전체 ​​컨트롤을 새로 고침

나는 비슷한 질문이 있지만 이해할 수있는 해결책이 없다는 것을 알고 있습니다. 또한 이것이 Sitecore 특정 문제 일 수 있다고 생각하기 시작했습니다.

<p><%= MyItem.Text %>" /></p> 

    <asp:UpdatePanel ID="LocationFilterUpdatePanel" runat="server"> 
    <ContentTemplate> 

     <asp:DropDownList ID="DDL1" OnSelectedIndexChanged="DDL1_SelectedIndexChanged" runat="server" AutoPostBack="true"> 

     </asp:DropDownList> 


     <asp:DropDownList ID="DDL2" OnSelectedIndexChanged="DDL2_SelectedIndexChanged" runat="server" AutoPostBack="true"> 

     </asp:DropDownList> 

    </ContentTemplate> 
    </asp:UpdatePanel> 

그리고 뒤에 코드 :

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!System.Web.UI.ScriptManager.GetCurrent(Page).IsInAsyncPostBack) 
     { 
      var context = new SitecoreContext(); 
      //Get Model from Sitecore 

      DDL1.DataSource = Model.Data; 
      DDL1.DataValueField = "Id"; 
      DDL1.DataTextField = "Name"; 
      DDL1.DataBind(); 
     } 

    } 

    protected void DDL1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     var context = new SitecoreContext(); 
     //Get Model from Sitecore 

     DDL2.DataSource = Model.Data; 
     DDL2.DataValueField = "Id"; 
     DDL2.DataTextField = "Name"; 
     DDL2.DataBind(); 
    } 

    protected void DDL2_SelectedIndexChanged(object sender, EventArgs e) 
    { 

    } 

페이지가로드 미세하지만 (디버깅 할 때)이 표시됩니다 DDL1의 인덱스를 변경 여기

은 사용자 정의 컨트롤의 코드 샘플입니다 MyItem.Text의 Null 예외입니다. 이것은 제어판 외부에 있습니다. 참고 : 스크립트 관리자를 추가했습니다.

내가 시도한 것들이 많이 있습니다. 다른 업데이트 모드를 설정하고 패키지 관리자 콘솔에서 Install-Package AjaxControlToolkit을 실행하여 내 솔루션에서 AjaxToolkit을 업데이트했지만 동작은 동일하게 유지됩니다.

감사합니다.

답변

5

Page_Load이 아닌 OnInit에 DDL1에 대한 데이터 바인딩을 넣습니다.
그리고 여기에 if 문을 포함하지 말고 데이터 바인딩을 수행하십시오.
OnInit 뒤에 선택한 값이 올바르게 설정되고 다른 이벤트 처리기의 DDL1 옵션에 액세스 할 수 있습니다.

+0

감사합니다. 그것은 효과가 있었다. OnInit에서 왜 Page_Load가 아닌지 알면 감사하겠습니다. 나는 그것을 시험해보기 위해 (별도의 사이트가 아닌) 별도의 프로젝트를 만들었고 페이지로드에이 코드를 남겨두면 괜찮습니까? –

+3

OnInit 중에 viewstate 값이 아직로드되지 않았기 때문에 작동합니다. 따라서 드롭 다운 목록에 값을 채울 수 있습니다. 그런 다음 OnInit과 Page_Load 사이에서 PreLoad 이벤트가 발생하여 viewstate가로드되고 컨트롤에 적용됩니다 (예 : 선택한 인덱스 설정). 자세한 내용은 http://msdn.microsoft.com/en-us/library/ms178472.aspx를 참조하십시오. –

+0

그건 실제로 일어난 일입니다. – Younes

0

AutoPostBack이 true로 설정된 asp : DropDownList 컨트롤이 있습니다.

는 드롭 다운리스트 컨트롤에서의 AutoPostBack = TRUE를 제거하고 드롭 다운리스트와 EVENTNAME로 설정하여 UpdatePanel을위한 비동기 트리거를 설정 =

이가 알고 문제입니다, 당신은 많은 문서를 찾을 수 "의 SelectedIndexChanged" 그것에 대해.

+0

이렇게하면 이벤트가 전혀 트리거되지 않습니다. DropDownList가 컨트롤 안에 있으면 트리거가 필요 없다는 것을 알고 있습니다. 이렇게하면 DropDownList는 이벤트를 발생시키지 않습니다. 사실 저는 이것을 별도의 프로젝트에서 시도해 보았지만 정상적으로 작동했습니다. Sitecore 7 (또는 설치된 모듈 중 하나)이 업데이트 패널의 기능을 손상시키는 것으로 의심됩니다. –