ASP.NET中的ViewState

ViewState是ASP.NET中用来保存WEB控件回传时状态值一种机制。在WEB窗体(FORM)的设置为runat="server",这个窗体(FORM)会被附加一个隐藏的属性_VIEWSTATE。_VIEWSTATE中存放了所有控件在ViewState中的状态值。

ViewState是类Control中的一个域,其他所有控件通过继承Control来获得了ViewState功能。它的类型是system.Web.UI.StateBag,一个名称/值的对象集合。

当请求某个页面时,ASP.NET把所有控件的状态序列化成一个字符串,然后做为窗体的隐藏属性送到客户端。当客户端把页面回传时,ASP.NET分析回传的窗体属性,并赋给控件对应的值。当然这些全部是由ASP.NET负责的,对用户来说是透明的。

使用ViewState的条件

如果要使用 ViewState,则在 ASPX 页面中必须有一个服务器端窗体标记 (<form runat=server>)。窗体字段是必需的,这样包含 ViewState 信息的隐藏字段才能回传给服务器。而且,该窗体还必须是服务器端的窗体,这样在服务器上执行该页面时,ASP.NET 页面框架才能添加隐藏的字段。 
Page 的 EnableViewState 属性值为 true。
控件的 EnableViewState 属性值为 true。

页面本身将 20 字节左右的信息保存在 ViewState 中,用于在回传时将 PostBack 数据和 ViewState 值分发给正确的控件。因此,即使该页面或应用程序禁用了 ViewState,仍可以在 ViewState 中看到少量的剩余字节。

设置ViewState
ViewState可以在控件,页,程序,全局配置中设置。缺省情况下 EnableViewState 为 true 。如果要禁止所有页面 ViewState 功能,可以在程序配置中把 EnableViewState 设为 false 。
在控件中:

<asp:DataGrid EnableViewState="false"%>

DataGrid1.EnableViewState = false;

在页中:

<%@ Page EnableViewState="false" %>

Page.EnableViewState = false;

在程序中:

在web.config中加入 <pages enableViewState="false" />

在全局配置:

在machine.config中修改 <pages enableViewState="false" />

EnableViewState优先级别:
全局配置 < 程序 < 页 < 控件

注意:下列服务器控件不能禁止ViewState

Textbox 
Checkbox
Checkbox List
RadioButtonList

上面控件的状态通过IPostBackEventHandler 和 IPostBackDataHandler接口处理,而不是ViewState的机制,所以EnableViewState没有效果。

原文地址:https://www.cnblogs.com/sutengcn/archive/2007/01/26/631309.html

.net 中viewstate的原理和使用相关推荐

  1. viewstate 解码 php,.NET_asp.net中ViewState的用法详解,在web窗体控件设置为runat = serv - phpStudy...

    asp.net中ViewState的用法详解 在web窗体控件设置为runat = "server",这个控件会被附加一个隐藏的属性_ViewState,_ViewState存放了 ...

  2. java final 实例_Java中final实现原理的深入分析(附示例)

    本篇文章给大家带来的内容是关于Java中final实现原理的深入分析(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. final在Java中是一个保留的关键字,可以声明成员变 ...

  3. 线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?线程池中线程复用原理

    1.一般的队列只能保证作为一个有限长度的缓冲区,如果超出了缓冲长度,就无法保留当前的任务了,阻塞队列通过阻塞可以保留住当前想要继续入队的任务.阻塞队列可以保证任务队列中没有任务时阻塞获取任务的线程,使 ...

  4. FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析

    FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析 怎么查找就绪任务中优先级最高的? tasks.c中声明了一个全局变量 uxTopReadyPriority,任务从其他状态进入就绪 ...

  5. 【直播预告】计算机视觉中数据增强原理和实践

    应广大粉丝要求,以后有三AI会多组织直播,分享更多实践的干货知识,下面预告一下下周六的知乎Live直播-计算机视觉中数据增强原理和实践. 1.直播基本信息 时间:2019年4月20日20:00开始. ...

  6. vue指令写在html中的原理,详解Vue中的MVVM原理和实现方法

    对Vue中的MVVM原理解析和实现首先你对Vue需要有一定的了解,知道MVVM.这样才能更有助于你顺利的完成下面原理的阅读学习和编写下面由我阿巴阿巴的详细走一遍Vue中MVVM原理的实现,这篇文章大家 ...

  7. 产品工作中的金字塔原理

    本文有PMCAFF 原创作者 咸鱼 原创发布于pmcaff.com 金字塔原理是国外一个慈祥的老太太(巴巴拉·明托)提出的一个方法论,主要是帮助我们清晰的思考.表达和写作的思维方式. 一. 什么是金字 ...

  8. 【转载】word2vec 中的数学原理详解

    文章目录 一.前言 二.预备知识 三.背景知识 四.基于 Hierarchical Softmax 的模型 五.基于 Negative Sampling 的模型 六.若干源码细节 原文传送门: wor ...

  9. 中间件是什么?在.NET Core中的工作原理又是怎样的呢?

    本文出自<从零开始学ASP.NET CORE MVC> 推荐文章:ASP.NET Core appsettings.json文件 ASP.NET Core 中的中间件(Middleware ...

最新文章

  1. android播放页蒙层过渡效果,EasyGuideLayer: 这可能是最简单、灵活、强大的页面蒙层组件了!...
  2. Python学习入门基础教程(learning Python)--2.3.5Python返回多个值问题
  3. ABAP 的TABLE CONTROL实践积累
  4. arcball原理 旋转视图 关键点总结 及代码
  5. 用Visual Studio 2019 开发stm32,cortex-m3, arm
  6. mysql 启动 修改密码_基础的启动/停止/重启/密码修改MySQL
  7. php-fpm哪里下载_centos – Nginx PHP-FPM提供.php文件作为下载
  8. 绩效管理KPI指标体系设计:142页KPI设计思路与实施实践
  9. Knockout应用开发指南 第二章:监控属性(Observables)
  10. java为什么要连接Mysql_为什么要启动mysql workbech,java才能连接mysql数据库呢?
  11. 我是如何学习Android源码的
  12. Solidity入门学习
  13. int与byte[]之间的相互转换
  14. C语言程序设计孙家啸第一版,广东(年4月自考各专业课程使用教材.doc
  15. 黑苹果opencore下HD4400打开百度云等软件出现花屏的解决方案
  16. HDU 5058 So easy (set容器大法好)
  17. 在小鸟云进行服务器托管,怎么升级配置?
  18. windows7 中pkeyconfig.xrm-ms文件无法删除解决办法
  19. bigo2020.算法一面(已凉)
  20. 隐藏IDEA的行首的黄色小灯泡

热门文章

  1. CSS常用中文字体、字号
  2. 软件自动化测试培训内容,软件自动化测试与持续集成实践培训方案
  3. 有哪些音质比较好的蓝牙耳机?2022音质好的蓝牙耳机推荐
  4. 计算机网络复习思维导图
  5. 简单计算器(浙大复试上机)
  6. PPT全程背景音乐设置办法
  7. 针对大量数据,MATLAB生成EXCEL文件并进行排版处理的源码
  8. VulnHub-driftingblues:9
  9. 个人开发小游戏应该如何选择游戏引擎?
  10. 2017全国大学生电子设计大赛B题 | 板球控制系统(一)序