2009-04-29 2 views
1

한 페이지로 asp.net 응용 프로그램을하고 있습니다. 이 페이지에는 하나의 usercontrol이 정의되어 있습니다. 이 사용자 정의 컨트롤 (3 개의 단추) 및 3 usercontrols 너무 정의되어 있습니다. 클릭 한 버튼에 따라 세 개의 usercontrol 중 하나가 true 또는 false로 바뀝니다.중첩 된 usercontrols에서 다시 게시를 시뮬레이션하는 방법?

이 세 가지 사용자 정의 컨트롤에는 버튼과 메시지가 있으며 메뉴의 버튼을 클릭하면 "다시 게시되지 않습니다"라는 메시지를 표시하려고하며 사용자 정의 컨트롤의 버튼을 클릭하면 메시지가 표시됩니다. "예, 포스트 백입니다 !!!".

질문은 userControl 또는 페이지의 속성 "IsPostBack"을 사용하면 메뉴의 클릭 된 단추가 중첩 된 usercontrol을 표시하기 때문에 "다시 게시가 아닙니다"라는 메시지가 표시되지 않습니다.

page 
    parent usercontrol 
    menu 
    nested usercontrol 1 
     message 
     button 
    nested usercontrol 2 
    nested usercontrol 3 

나는 그것의 ViewState를 사용하여 수행 할 수 있습니다 알고 있지만, IsPostBack을 속성을 시뮬레이션 또는 진정한 UserControl을 다시 게시이시기를 알 수있는 방법이있다 :

이 페이지의 구조는?

감사합니다.

답변

0

이 문제에 대한 해결책이 있습니다. 요소가 발생하면 Request.Form 컬렉션의 서버에 이벤트가 전송되므로 Request.Form 컬렉션에 자식 컨트롤 (usercontrol 자체에 정의되어 있음)이 있는지 확인하는 중첩 된 usercontrols의 속성을 만들었습니다.

public bool IsUserControlPostBack 
    { 
     get 
     { 
      foreach (Control c in Controls) 
       foreach(string key in Page.Request.Form.AllKeys) 
        if(c.ClientID == key.Replace('$','_')) 
         return true; 

      return false; 
     } 
    } 

이 코드는 usercontrol의 속성 일 수도 있고, 자주 호출되는 경우 usercontrol의 OnInit 이벤트에 설정된 변수 일 수도 있습니다.

관련 문제