用户控制Viewstate

时间:2009-10-28 21:56:36

标签: asp.net

在一些书中,我看到他们保存用户控件的自定义属性,如下所示:

 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;
   }

我的问题是为什么我可以简单地将它(在setter中)存储在viewstate中:Vistate [“ID”] = id;
然后从那里检索它?

1 个答案:

答案 0 :(得分:2)

ViewState (您在问题中谈到的内容)和 ControlState (示例代码中显示的内容)之间存在差异:

    通过设置EnableViewState="false",UserControl的用户可以关闭
  • ViewState 。在这种情况下,您将无法在下一个请求/回发期间恢复您的属性值(因为没有ViewState)。
  • 无法关闭
  • ControlState 。这意味着,无论您在ControlState中存储的内容在下一次回发期间都可用,因此您应该将ControlState用于您在下一次请求/回发期间绝对需要检索的数据。

另请参阅MSDN中的这些页面:ASP.NET ViewState OverviewControlState vs. ViewState

摘录自第一页:

  

除了查看状态,ASP.NET   支持控制状态。该页面使用   控制状态以持续控制   必须保留的信息   回发之间,即使是查看状态   已禁用页面或用于   控制。像查看状态,控制   state存储在一个或多个hidden中   字段。