2009-01-08 14:00
每个控件(在标记上) <asp:datagrid EnableViewState="false" ?/>
每个页面(在指令中) <%@ Page EnableViewState="False" ?%>
每个应用程序(在 web.config 中) <Pages EnableViewState="false" ?/>

1.如果在应用程序的Web.config中有它<pages enableViewState="false" validateRequest="false"></pages>但是某一页面不需要禁用enableViewState时,该怎么办?

1)有母版页的情况下:

protected void Page_PreInit(object sender ,EventArgs e)
    {
        Page.Master.EnableViewState = true;

Page.EnableViewState=true;

}

2)没有母版页的情况下

protected void Page_PreInit(object sender ,EventArgs e)
    {
              Page.EnableViewState=true;

}

或者在该页面的指令中 <%@ Page EnableViewState="True" ?%>

EnableViewState属性 :ASP.Net中控件的EnableViewState属性

在ASP.Net中对各个WebForm控件引入以前没有的EnableViewState属性。这个属性究竟有什么用。我们知道对于WebForm而言,其代码是在服务器端的,以处理客户端的请求。当用户通过浏览器浏览网页的时候,会对网页进行某些操作,比如打开新链接,或单击某个按钮。在ASP中,这些是通过脚本语言对其进行处理,之后再传递给服务器端。但是在ASP.NET下,由于采用了code behind技术,在coding的时候,通常是将以前客户端完成的工作放到了服务器端。

那么,服务器是怎么知道客户的操作的呢?比如我在文本框输入的内容,或者单击了登录按钮,服务器端是怎样得到这些信息的呢?因为没有这些信息,服务器端就无法响应客户的请求。原理就是ASP.NET引用了viewstate的机制。在服务器端保存了网页各个控件及页面的状态,这其中包括各个控件在页面上的布局,和他们各自的属性。这些值就保存在ViewState下。我们可以观察Aspx页面的html源代码,假设这个页面上有一个button按钮,和一个listBox控件,html文件如下:

<input type="hidden" name="__VIEWSTATE" value="dDwzODYzNDM5NTU7Oz7FvviJbq45bDa7QJaumIiOhZ8mOQ==" />

<input type="submit" name="Button1" value="Button" id="Button1" style="height:40px;width:96px;Z-INDEX: 101; LEFT: 200px; POSITION: absolute; TOP: 240px" />
<select name="ListBox1" size="4" id="ListBox1" style="width:152px;Z-INDEX: 102; LEFT: 176px; POSITION: absolute; TOP: 120px"></select>

我们它的不同之处,一是少了以前所必须响应客户端事件的脚本语言,一是多了一个名为”_VIEWSTATE”的属性。其值是一长串字符。类型为“hidden”。这个值记录的就是各个控件和页面的状态信息。当用户对页面进行相关操作的时候,状态值发生改变,并将改变的值传递给服务器端。服务器端在比较改变后的状态值和初始值之间的区别,以响应具体的请求。

一旦页面的控件很多,这种频繁的传递控件状态值对网络的消耗是很大的,因此,ASP.Net提供了EnableViewState属性,系统默认的值为true。当设置为true时,在传递状态值时就包括该控件;如果设置为false,则传递状态值时则不包括它。既然状态值不包括该控件,则客户端对它进行的操作,服务器端是不响应的。

我们可以做个实验,在Button1_Click事件中,编写代码:

ListBox.Items.Add(”客户端点击按钮一次!”);

此时运行该应用程序,单击网页上的按钮,在ListBox中会添加内容,不断地单击,内容则不断添加。如果我们将ListBox的EnableViewState属性改为false时,不断单击按钮,则只能添加一次。

这样有什么好处呢?如果我们在开发Web应用程序时,某些控件是不需要接受用户的操作或只需要接受一次操作的时候,我们可以将这些控件的EnableViewState属性改为false,这样可以优化我们的程序,提高网络访问的速度。

下步骤说明EnableViewState属性的应用:
   (1)、单击命令按钮(或其它引发往返行程的操作)
   (2)、因为lblTag的EnableViewState属性为true 所以当单击命令按钮时,返回服务器的信息中包含有 lblTag的状态值,也就是lblTag的Text属性值LabelHelloHelloHello
   (3)、IIS服务器找到WebForm1.aspx页面源文件
   (4)、把页面构建成最原始的样子,即lblTag的Text属性值为Label1
   (5)、根据返回值"LabelHelloHelloHello" 把lblTag的Text属性值设置为"LabelHelloHelloHello"
   (6)、执行相应的操作:this.lblTag.Text=this.lblTag.Text+"Hello"; 把lblTag的Text属性设置为LabelHelloHelloHelloHello
   (7)、把页面返回给浏览器
    (8)、完成相应的操作
 
而如果没有把lblTag的EnableViewState属性为true,即设置为False,则执行如下操作:
(9)、因为lblTag的EnableViewState属性为False 所以当单击命令按钮时,返回服务器的信息中不包含有 lblTag的状态值,也就是lblTag的Text属性值LabelHelloHelloHello不被返回服务器
(10)、IIS服务器找到WebForm1.aspx页面源文件
(11)、把页面构建成最原始的样子,即lblTag的Text属性值为Label1
(12)、执行相应的操作:this.lblTag.Text=this.lblTag.Text+"Hello"; 把lblTag的Text属性设置为LabelHello
(13)、把页面返回给浏览器
(14)、完成相应的操作

总结

EnableViewState 指定是否向服务器端传送某(些)控件的属性值、状态。

EnableViewState 的默认值为 true,设置为 false 可以降低数据传送量,当然应该在程序逻辑允许设置为 false 的情况下。

EnableViewState 可用于控件,也可用于 @ Page、@ Control、@ Master 指令语法。当控件的 EnableViewState 的设置与指令语法的设置不一致时,取 false 值。

转载于:https://www.cnblogs.com/yssoft/archive/2009/02/02/1382528.html

EnableViewState属性的应用相关推荐

  1. C#中EnableViewState属性有什么用?

    EnableViewState 属性 指示是否在页请求之间保持视图状态.如果要保持视图状态,则为 true:否则为 false.默认值为 true. 以上为官方对 EnableViewState 的解 ...

  2. GridView 类型公开的所有成员(公共属性、公共方法、私有属性.......)

    下表列出了由 GridView 类型公开的成员. 公共构造函数   名称 说明 GridView 初始化 GridView 类的新实例. 页首 公共属性 (请参见 受保护的属性 )   名称 说明 A ...

  3. ASP.NET中的AutoPostBack和IsPostBack以及EnableViewState三者的运用以及区别

    相信大家都在开始学ASP.NET的时候都会被它里面的几个属性搞得晕头转向,本文向各位学者介绍AutoPostBack和IsPostBack以及EnableViewState三者的运用以及区别,话不多说 ...

  4. Session,ViewState用法

    Session,ViewState用法 基本理论: session值是保存在服务器内存上,那么,可以肯定,大量的使用session将导致服务器负担加重. 而viewstate由于只是将数据存入到页面隐 ...

  5. 搜集《ASP.NET中常用的26个优化性能方法》

    1. 数据库访问性能优化 a.数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接 ...

  6. 微软图表控件MsChart

    转自:http://tech.ddvip.com/2008-11/122640479791375.html 昨天在网上看到了微软发布了.NET 3.5框架下的图表控件,第一时间抓下来看了一下,发觉功能 ...

  7. asp.net程序性能优化的七个方面

    asp.net程序性能优化的七个方面 一.数据库操作 1.用完马上关闭数据库连接 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器 ...

  8. ASP.NET ViewState 初探

    Susan Warren Microsoft Corporation 与刚接触 ASP.NET 页面的开发人员交谈时,他们通常向我提出的第一个问题就是:"那个 ViewState 到底是什么 ...

  9. 只在必要时保存服务器控件视图状态

    自动视图状态管理是服务器控件的功能,该功能使服务器控件可以在往返过程上重新填充它们的属性值(您不需要编写任何代码).但是,因为服务器控件的视图状态在隐藏的窗体字段中往返于服务器,所以该功能确实会对性能 ...

  10. 自定义控件的构建(5)

    Share 在ASP.NET框架中支持在回传中保存值的有2种方式:视图状态和控件状态 视图状态 ASP.NET中几个对象属性与控件最为密切的,就是ViewState了. 这里对其做下说明,任何可序列化 ...

最新文章

  1. 自动挂载ios_Ubuntu自动挂载iso文件 | 学步园
  2. 计算机实测物理实验报告,計算机实测物理系数实验论文.doc
  3. 认识mongodb文档的动态模式
  4. 你最喜欢的 iOS 开发的技巧和提示有哪些?
  5. 缓存,你真的用对了么?
  6. 解决jfinal-ext CsvRender 中文乱码
  7. Nginx 静态服务器
  8. 9-12 原生安装4
  9. python 怎么算l2范数_“火车过桥”“火车会车”和“火车超车”问题怎么解?图形很直观...
  10. 单纯学python能干啥_如何高效学习Python编程,转行的朋友可以过来看看,单纯的经验分享...
  11. 如何搭建靠谱的测试环境
  12. 基于pyqt5实现QQ截图功能
  13. 2d unity 多物体 射线_Unity3D 之射线检测
  14. Office协同办公讲解以及软件归纳
  15. facebook的network-connection-class(测量移动端网络质量)源码详解
  16. 海海软件DRM-X 4.0产品介绍
  17. android 钉钉考勤日历,vue实现钉钉的考勤日历
  18. AutoCAD Civil3D 2023安装图文教程及下载
  19. Linux下更新git(亲测有效)
  20. 关于原创文章特此说明

热门文章

  1. php获取笔顺矢量,PHP获取汉字笔画数功能【测试可用】
  2. Unity 安卓打包
  3. matlab二次求导函数,原来可以这样求导函数,再复杂的函数求导不再话下!
  4. vscode利用ssh远程连接linux虚拟机
  5. Lua调用C的动态库
  6. 解决java.io.EOFException 异常
  7. uniapp 微信内置浏览器h5打开app
  8. 远程桌面连接,运维工程师-必备软件【MultiDesk】
  9. RocketMQ 5.0 POP消费模式
  10. 平面设计专业介绍,平面设计专业有哪些课程