2009-06-11 6 views
0

컨트롤이 init에서로드 될 때 발생하는 문제가 있으며 여전히 적절한 포스트 백 이벤트를 발생시키는 데 도움이되지 않습니다.내 사용자 지정 컨트롤로드 마법사에 대한 포스트 백 문제

표준 asp.net 마법사로드 방법을 피하는 동적 제어로드를 사용하여 설명, 완전히 사용자 지정된 단계, 하위 단계 통합을 전환 할 수있는 풍부한 마법사 컨트롤을 만들려고합니다.

아이디어는 왼쪽 부분의 탐색, 오른쪽 부분의 내용 또는 오른쪽 부분에서 실행되고 전체 영역으로 이동하는 하위 단계를 갖는 것입니다.

Download source project

+0

코드를 보지 않고도이 컨트롤을 동적으로로드하고 있습니까? – epitka

답변

0

좋아, 내가 질문을 다시 읽고, 여기 당신이해야 할 것입니다. 각 포스트 백에서 이러한 컨트롤을 다시로드해야하며 항상 동일한 "Id"를 제공해야합니다. 이것은 Page_Init 또는 Page_Load 이벤트에서 수행 할 수 있습니다. 물론 각 게시물에 이벤트 핸들러를 다시 부착해야합니다.

0

많은 감사합니다. 글쎄, 나는로드 컨트롤 방법에서 이드가 문제라는 것을 알았습니다. 나는이 마법사를하고 있었다. .. 대부분의 물건은 꽤 지금 일한다. 내가 splitview을 사용하여 단계로드 컨트롤을 사용하여 단일 뷰를 사용하여 컨트롤을 하위 단계입니다으로

public void LoadSplitViewControl(string path) 
{ 
    SwitchNavigationView(NavigationView.SplitView); 
    LastNavigationView = NavigationView.SplitView; 
    LoadControl(SplitControlLoader, path, "LoadedControlSplit"); 
} 

public void LoadSingleViewControl(string path) 
{ 
    SwitchNavigationView(NavigationView.SingleView); 
    LastNavigationView = NavigationView.SingleView; 
    LoadControl(SingleControlLoader, path, "LoadedControlSingle"); 
} 

public void LoadSingleViewControlAsClear(string path) 
{ 
    SwitchNavigationView(NavigationView.SingleView); 
    LastNavigationView = NavigationView.SingleView; 
    LoadControlAsClear(SingleControlLoader, path, "LoadedControlSingle"); 
} 

private void LoadControl(PlaceHolder holder, string path, string ID) 
{ 
    UserControl ctrl = (UserControl)Page.LoadControl(path); 
    ctrl.ID = ID; 
    LastControlPath = path; 
    holder.Controls.Clear(); 
    holder.Controls.Add(ctrl); 
} 

// 때로는 viewstate가 그렇게 오류 유효하지 않습니다 사람이 작동하지 않습니다 방식을 볼 수 관심이 있다면 은 .. 일부 업데이트가 던져 질 것이지만, 아래 메소드를로드 할 LoadSingleViewControlAsClear를 사용하여이 문제를 해결할 수 있습니다.

private void LoadControlAsClear(PlaceHolder holder, string path, string ID) 
{ 
    UserControl ctrl = (UserControl)Page.LoadControl(path); 
    ctrl.ID = ID; 
    LastControlPath = path; 
    ctrl.EnableViewState = false; 
    holder.Controls.Add(ctrl); 
} 

/내가 이러한 마법사를 위해 사용하고 다른 멋진 아이디어는 전 단계에 걸쳐 수집 된 값을 저장하는 viewstate가 아니라 세션 객체를 사용하지하고 있다는 점이다. 내 세션 객체 키는 인증 된 사용자 이름과 페이지 가이드에 의해 생성되므로 많은 페이지를로드 할 수 있으며 각각 다른 세션 객체를 처리 할 수 ​​있습니다./

public Guid PageGuid 
{ 
    get 
    { 
     if (PageGuidField.Value == "") 
     { 
      var _pageGuid = Guid.NewGuid(); 
      PageGuidField.Value = _pageGuid.ToString(); 
      return _pageGuid; 
     } 
     return new Guid(PageGuidField.Value); 
    } 
} 
관련 문제