zoukankan      html  css  js  c++  java
  • ViewState的工作原理

    ViewState是一种机制,ASP.NET   使用这种机制来跟踪服务器控件状态值,否则这些值将不作为   HTTP   窗体的一部分而回传。例如,由   Label   控件显示的文本默认情况下就保存在   ViewState   中。作为开发人员,您可以绑定数据,或在首次加载该页面时仅对   Label   编程设置一次,在后续的回传中,该标签文本将自动从   ViewState   中重新填充。因此,除了可以减少繁琐的工作和代码外,ViewState   通常还可以减少数据库的往返次数。
      ViewState   确实没有什么神秘之处,它是由   ASP.NET   页面框架管理的一个隐藏的窗体字段。当   ASP.NET   执行某个页面时,该页面上的   ViewState   值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即   <input   type=hidden>)。由于隐藏窗体字段是发送到客户端的页面的一部分,所以   ViewState   值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则   ViewState   字符串也将被回传。在上面的图   2   中可以看到   ViewState   窗体字段及其回传的值。
      回传后,ASP.NET   页面框架将解析   ViewState   字符串,并为该页面和各个控件填充   ViewState   属性。然后,控件再使用   ViewState   数据将自己重新恢复为以前的状态。



    关于   ViewState   还有三个值得注意的小问题。
       1、 如果要使用   ViewState,则在   ASPX   页面中必须有一个服务器端窗体标记   (<form   runat=server>)。窗体字段是必需的,这样包含   ViewState   信息的隐藏字段才能回传给服务器。而且,该窗体还必须是服务器端的窗体,这样在服务器上执行该页面时,ASP.NET   页面框架才能添加隐藏的字段。  
       2、 页面本身将   20   字节左右的信息保存在   ViewState   中,用于在回传时将   PostBack   数据和   ViewState   值分发给正确的控件。因此,即使该页面或应用程序禁用了   ViewState,仍可以在   ViewState   中看到少量的剩余字节。  
       3、 在页面不回传的情况下,可以通过省略服务器端的   <form>   标记来去除页面中的   ViewState。 

  • 相关阅读:
    seata原理
    activemq 启动时出现错误 Address already in use: JVM_Bind
    高并发第五弹:安全发布对象及单例模式
    高并发第三弹:线程安全原子性
    高并发第一弹:准备阶段 了解高并发
    CentOS7安装PostgreSQL9.4
    高并发第二弹:并发概念及内存模型(JMM)
    高并发第四弹:线程安全性可见性有序性
    设计模式模板方法模式
    设计模式建造者模式(图解,使用场景)
  • 原文地址:https://www.cnblogs.com/feihusurfer/p/1409498.html
Copyright © 2011-2022 走看看