2013-02-25 2 views
1

제목이 불합리한 경우 미리 사과드립니다. 내가 갇혀있는 상황에서 둘 다에 대한 해답을 이해하려고 노력 중입니다. 저는 viewstate에서 카운트를 추적하면서 버튼 클릭에 대해 사용자 정의 컨트롤을 동적으로 생성합니다. 다음은 코드입니다.ViewState에서 포스트 백에 값을 지정하지 않음/페이지 수명주기의 어느 단계에서 사용할 뷰 스테이트가

private int custControlCountID; 

    public int CustControlCountID 
    { 
     get 
     { 
      return (int)(ViewState["CustControlCountID"] == null? 1 : ViewState["CustControlCountID"]); 
     } 
     set 
     { 
      ViewState["CustControlCountID"] = value; 
     } 
    } 

    protected void Page_Init(object sender, EventArgs e) 
    { 
     for (int i = 0; i < CustControlCountID; i++) 
     { 
      RejRow customControl = (RejRow)LoadControl("~/RejRow .ascx"); 
      customControl.ID = "rejRow" + i; 
      divHolder.Controls.Add(customControl); 
     } 
    } 

    protected void btnNewRow_Click(object sender, EventArgs e) 
    { 
     CustControlCountID = CustControlCountID + 1; 
     RejRow customControl = (RejRow)LoadControl("~/RejRow.ascx"); 
     customControl.ID = "rejectRow" + CustControlCountID; 
     divHolder.Controls.Add(customControl); 
    } 

관련 코드 만 공유했습니다. 단추 컨트롤을 클릭하면 성공적으로 추가되지만 한 번만 추가됩니다. 이는 Page_Init에서 CustControlCountID가 항상 1로 설정되기 때문입니다. Page_Init 이후에 LoadViewState가 호출된다는 것을 알았 기 때문에 내가 설정 한 값을 Page_Init에서 사용할 수 없습니다. 또한 컨트롤 계층 구조가 작성되는 동안 Page_Init에 추가 할 컨트롤을 배웠습니다. 이 점을 이해하도록 도와주세요.

+0

'Page_Init' 대신 컨트롤을 추가하기 위해'CreateChildControls' 메서드를 재정의하려 했습니까? –

답변

1

이론은 Page_init와 Page_load 사이에 ViewState이로드됨에 따라 Page_init에서 가져온 값이로드 된 viewstate에서 가져온 것이 아니며, 설정하면 프레임 워크가 실제로로드 할 때 재정의 될 것입니다 페이지 수명주기의 다음 단계에서

처음에는 CreateChildControls 메서드를 재정 의하여 컨트롤을로드 해 볼 수 있습니다.