2009-10-28 52 views
0

在一些書,我已經看到了他們保存這樣的用戶控件的自定義屬性:在這樣的視圖狀態用戶控件的ViewState

private int id = 0; 
    public int ID 
    { 
     get { return id; } 
     set { id = value; } 
    } 

    protected void Page_Init(object sender, EventArgs e) 
    { 
     this.Page.RegisterRequiresControlState(this); 
    } 

    protected override void LoadControlState(object savedState) 
    { 
     object[] ctlState = (object[])savedState; 
     base.LoadControlState(ctlState[0]); 
     this.ID = (int)ctlState[1]; 
    } 

    protected override object SaveControlState() 
    { 
     object[] ctlState = new object[2]; 
     ctlState[0] = base.SaveControlState(); 
     ctlState[1] = this.ID; 
     return ctlState; 
    } 

我的問題是,爲什麼可以簡單地存儲它(在二傳手):Vistate [ 「ID」] = ID;
然後在那裏檢索它?

回答

2

ViewState的(你在你的問題說什麼)和了ControlState-(什麼是在示例代碼中所示)之間的區別:可以通過關閉

  • 的ViewState UserControl的用戶,通過設置EnableViewState="false"。在這種情況下,您將無法在下一個請求/回發期間恢復您的屬性值(因爲沒有ViewState)。
  • ControlState無法關閉。這意味着,無論您在ControlState中存儲什麼,都將在下一次回發期間提供,因此您應該使用ControlState來處理在下一次請求/回發期間絕對需要能夠檢索的數據。

參見MSDN中的這些頁面:從第一頁ASP.NET ViewState OverviewControlState vs. ViewState

摘錄:

除了查看狀態,ASP.NET 支持控制狀態。該頁面使用 控制狀態持久控制 必須在回發之間保留 的信息,即使頁面或 控件的視圖狀態 被禁用。與查看狀態一樣,控制 狀態存儲在一個或多個隱藏的 字段中。

+0

你是什麼意思「可以被你的UserControl的用戶關閉」? 你的意思是在他的網頁上使用這個控件的開發者?如果是,他也可以從用戶控件中刪除ControlState ... – samuel 2009-10-28 22:14:16

+0

無論誰在編寫使用該控件的頁面,都可以設置「EnableViewState」屬性,該屬性可以被禁用,而不是ControlState的情況, t財產將其關閉。 – 2009-10-28 22:28:45

+0

我仍然不明白,用戶不是訪問我的網站的「最終用戶」,使用的是在他的頁面上使用此控件的開發人員。如果他打算將它用於財產,他爲什麼應該關閉視圖狀態? – samuel 2009-10-28 22:30:11

相關問題