今天看了一篇关于“Asp.net 页生命周期”的文章,有这样一句话:果您要开发自定义控件,就必须熟悉页生命周期,以便正确进行控件初始化,使用视图状态数据填充控件属性以及运行任何控件行为代码。问题一:什么是视图数据“ViewState”???问题二:在绑定控件,比如绑定DrowpdownList,CheckBoxList控件时,要把查询出的数据用“ViewState”进行存储。这样做有什么好处,存储的数据怎样再次使用呢???问题三:视图数据“ViewState”怎样使用???它不是非常消耗资源吗,怎么还利用它来存储要绑定到控件的数据???问题四:视图数据“ViewState”保存在本地,这不是和“Cookies”相似吗?他们之间有什么差别嘞???

解决方案 »

  1.   

    ViewState可以用来做什么?以名值对的方式来存控件的值,和Hashtable的结构类似; 
    跟踪那些ViewState中出现改变的值,以便对这些脏数据(dirty)进行进一步的处理; 
    通过序列化将ViewState中的值保存在页面的隐藏域(Hidden Field)中(这是默认的持久化方式),并通过反序列化得到对应的ViewState对象以便进行相应的操作; 
    在页面回传的过程中自动的存储ViewState中的跟踪的值。 参考看完你就清晰了
      

  2.   

    问题三:http://dev.firnow.com/course/4_webprogram/asp.net/netjs/20090904/173787.html问题四:viewstate的值保存在浏览器的html代码中 , 当浏览器关闭 , 则值消失 , 即viewstate是在本页面之内各函数间进行传值的 , 至于为什么要使用这种方法 , 因为在一个事件发生之后 , 页面可能会刷新 , 如果定义全局变量会被清零 , 所以要使用 viewstate;Cookies则有两种方法 , 一种方法是把值保存在浏览器的变量中 , 当浏览器关闭时结束 , 另一种方法是保存在硬盘中 , 只要时间不过期 , 下次还可使用.
      

  3.   

    你可以参照
    http://msdn.microsoft.com/zh-cn/library/bb386448.aspxViewState是通过 隐藏表单进行传递的
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/ddddddxxxxxx/">要把查询出的数据用“ViewState”进行存储?
    存不存是根据页面的需要进行的,一般是不存的用它来存储要绑定到控件的数据,有时候是传递参数的需要,比如传递CommandArgument必须启用视图才可以Cookies有点小限制。ViewState存储的内容更多为了提高性能,尽量少用或者不用 ViewState
      

  4.   

    服务器和客户端通信完毕后即断开连接。客户端回发服务器端需要将控件的状态及修改内容回发回去,这样服务器便知道客户端进行了哪些操作。
    具体服务器端怎么解析的,是asp.net的那个dll做的。
      

  5.   

    我知道你狠迷茫,以前我跟你一样有过这样的迷茫,上面2位说的已经非常好了,,
    但是,我要说的是,你怎么看恐怕都无法真正明白,因为很多东西需要了解到原理,,你去看一下HTTP协议,就会明白,HTTP是无状态的,它根本分不清哪个页面是新页面,哪个页面是回传页面,,为了维系值不丢失(可能你又不明白了,没事,可以知道我问明白  )微软无比牛X发明视图状体这个东西,然后你看完我这个,在看楼上几位的可能会明白些
      

  6.   

    首先页面回传以后,整个Page将重新生成并且那些页面上声明的静态控件也都已经被解析添加到以Page为根节点的控件树中,那些静态控件对应的静态声明的属性值也都被初始化。然后是OnInit阶段,在这个阶段ASP.NET会调用TrackViewState方法,从此以后所有对控件属性的赋值操作都将导致被跟踪。接着就是LoadViewState()方法被调用,这里那些从_ViewState中反序列化出来的值将被重新赋给对应的控件,由于在此之前TrackViewState()已经被调用了,_ViewState中包含的数据对应的属性值都会被标记为Dirty。这样当调用SaveViewState的时候,这些属性值还是会被持久的保留到_ViewState中,这样在页面的一次次回传和页面一次次的重新建立的过程中,这些控件的值就被保留下来了。
      

  7.   

    viewstate的值保存在浏览器的html代码中 , 当浏览器关闭 , 则值消失 , 即viewstate是在本页面之内各函数间进行传值的 , 至于为什么要使用这种方法 , 因为在一个事件发生之后 , 页面可能会刷新 , 如果定义全局变量会被清零 , 所以要使用 viewstate;Cookies则有两种方法 , 一种方法是把值保存在浏览器的变量中 , 当浏览器关闭时结束 , 另一种方法是保存在硬盘中 , 只要时间不过期 , 下次还可使用.
      

  8.   

    ViewState 用来跟踪和保存控件的状态信息。否则这些信息可能会丢失,原因可能是这些值不随着 form 回发,或者根本就不在 page 的 html 中。
    ViewState 中保存着代码中改变的控件属性,通过代码绑定到控件的任何数据,以及由用户操作触发,回发的任何更改。
    ViewState 还提供了一个状态包(StateBag), 这是一个特殊的集合或字典(collection or dictionary), 可以用来保存,通过一个 key 来恢复任意的对象或者值。