代码之家  ›  专栏  ›  技术社区  ›  samuel

用户控件的视图状态

  •  0
  • samuel  · 技术社区  · 16 年前

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

     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 回复  |  直到 16 年前
        1
  •  2
  •   M4N    16 年前

    两者之间有区别 对象 (你所说的问题)和 控制状态 (示例代码中显示的内容):

    • 对象 可以由用户控件的用户通过设置 EnableViewState="false" . 在这种情况下,您将无法在下一个请求/回发期间恢复属性的值(因为没有viewstate)。
    • 控制状态 无法关闭。这意味着,存储在controlState中的任何内容都将在下一次回发期间可用,因此您应该对在下一次请求/回发期间绝对需要能够检索的数据使用controlState。

    另请参见msdn中的以下页面: ASP.NET ViewState Overview ControlState vs. ViewState

    摘自第一页:

    除了视图状态外,ASP.NET 支持控制状态。页面使用 控制状态到持久控制 必须保留的信息 在回发之间,即使视图状态 对页面或 控制。和视图状态一样,控件 状态存储在一个或多个隐藏中 领域。

    推荐文章