Welcome 微信登录

首页 / 网页编程 / ASP.NET / Asp.net ViewState——运用

Asp.net ViewState——运用2011-12-30 博客园 MythYsJh对于asp.net开发者,尤其是对控件开发感兴趣的朋友来说,视图状态绝对是个让人头痛的问题.一直以来,我都很困惑,在网上寻觅了很久,这两天才稍稍有了些眉目. 再鉴于本人一直潜水,因此决定今天就冒第一个泡泡吧.

当我们从Control或者WebControl派生新的控件时,我们不用定义ViewState属性就可以使用改属性了,因此它应该是派生下来的.当我们用reflector查看下源代码就可以知道,它位于Control中.

protected virtual StateBag ViewState{  get  {  .  }  set  {    }}
这里又出现了一个StateBag新类型,它又是什么什么东西呢?我们还是从源代码入手:

StateBag来自于System.Web.UI,它的声明如下:

  public sealed class StateBag : IStateManager, IDictionary, ICollection, IEnumerable     ............
这里我们重点要关注的是IStateManager,因为在我们为自己的自定义控件定制视图状态管理时就需要从这个接口派生.但这次我先不讨论它

从名字上来说,我们大致可以认为它是一个容器,一个装"State"的容器.

下面让我们看看StateBag的实现:

private IDictionary bag;private bool marked;public StateBag(bool ignoreCase)    {      this.marked = false;      this.ignoreCase = ignoreCase;      this.bag = this.CreateBag();    }private IDictionary CreateBag()    {      return new HybridDictionary(this.ignoreCase);    }