2011-10-05 2 views
2

질문이 있는데 viewstate 작동 방식을 이해하지 못하기 때문일 수 있습니다. 내가 만든 사용자 정의 컨트롤에서 속성에 대한 setter에서 viewstate 변수를 설정하는 코드가 있습니다.ViewState가 포스트 백을 통해 사용자 정의 추가 사항을 유지하지 않음

public bool EditMode 
    { 
     get { return (bool)(ViewState["editMode" + this.ID] ?? false); } 
     set {ViewState["editMode" + this.ID] = value;} 
    } 

버튼 클릭 이벤트 중에 editmode가 설정됩니다.

public void shippingButton_Click(object sender, EventArgs e) 
    { 
     if (((Button)sender).CommandName== "Edit") 
     { 
      ctrlShippingAddress.EditMode = true; 
     } 
     else 
     { 
      Page.Validate(); 
      if (Page.IsValid) 
      { 
       ctrlShippingAddress.SaveAddress(); 
       ctrlShippingAddress.EditMode = false; 
      } 
     } 
    } 

나는 경우 내가 페이지 사이클의 정확한 지점에서 viewstate가이 추가되지 않은 페이지로드에 설정을 수동으로 시도했지만, 내가 이해로 이벤트를 렌더링 전에 발생합니다. 또한 ViewStateMode = "Enabled"를 컨트롤에 추가 한 다음 페이지를 사용하고 행운이없는 마스터 페이지에 추가하려고했습니다.

get/set의 시점에서 디버그하면 viewstate가 빈 콜렉션이라는 것을 알 수 있습니다. (이는 유지해야하는 양식 데이터를 저장하기 때문에 이해가되지 않습니다.)

감사합니다.

+0

로 설정 될 필요가 , 을 true (분명히)로 설정해야합니다. –

+0

이 메모를 답안으로 다시 게시 한 다음 받아 들여서 나중에이 질문을 발견하면 분명히 표시됩니다. 대답. – Jeff

답변

0

을 나는 문제가 Web.config의

의 페이지 노드에있는 것을 발견
<pages enableViewState="false"> 

나는 문제가 웹 구성의 페이지 노드에있는 것을 발견 동료와 함께 검토 한 사실

0

컨트롤 ID를 ViewState 키에 추가 할 필요가 없습니다. 나는 당신이 독창성을 위해 그것을하고 있다고 추측하지만 그것은 필요하지 않습니다.

당신의 문제를 해결할 수 위의 대신이 같은 시도되지 않은 경우 : 동료와 함께 검토 한 후

public bool EditMode 
{ 
    get 
    { 
     bool editMode = false; 
     if (ViewState["editMode"] != null) 
      editMode = (bool)ViewState["editMode"]; 
     return editMode; 
    } 
    set 
    { 
     ViewState["editMode"] = value; 
    } 
} 
관련 문제