2011-10-05 29 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; 
      } 
     } 
    } 

我已經嘗試過手動的情況下,我沒有加入這在頁面週期正確的點的視圖狀態設置它在頁面加載,但據我瞭解事件發生之前渲染。我也嘗試添加ViewStateMode =「Enabled」到控件,然後到使用它的頁面,然後到沒有運氣的母版頁。

如果我在get/set的位置進行調試,我看到viewstate是一個空集合(這沒有意義,因爲它也保存了應該保留的表單數據)。

我很感激任何幫助。

+0

與同事在檢查之後,我發現,這個問題是在web配置的頁面節點 需要設置爲true(顯然) –

+0

您應該重新發布此評論作爲答案,然後接受它,所以如果有人在將來發現此問題,他們也會發現一個明確標記回答。 – Jeff

回答

0

與同事在檢查之後,我發現,這個問題是在web.config

的網頁節點
<pages enableViewState="false"> 

需要設置爲true

0

您不需要將控件ID附加到ViewState項。我假設你是爲了唯一性而做的,但沒有必要。

上面可能會解決你的問題,但如果不嘗試這樣的事情,而不是:

public bool EditMode 
{ 
    get 
    { 
     bool editMode = false; 
     if (ViewState["editMode"] != null) 
      editMode = (bool)ViewState["editMode"]; 
     return editMode; 
    } 
    set 
    { 
     ViewState["editMode"] = value; 
    } 
} 
相關問題