Web 应用程序是无状态的。服务器中的页面在每一次被请求的时候都会创建 Web 页面类的新实例。这通常意谓着所有与页面和控件相关联的信息在每次回传过程中都将被丢失。例如,如果用户在某个 HTML Web 页面的文本框中输入信息,那么该信息就会被发送到服务器,但是不会再次返回到客户端。要克服 Web 开发中这个固有的局限性,ASP.NET 页面框架包括了几个状态管理特征,其中一个就是视图状态,用于从浏览器到 Web 服务器的回传过程之间保持页面和控件的值。更多关于状态管理的信息,请参考:[ASP.NET 状态管理概览]。

视图状态是 ASP.NET 页面框架用于在回传过程中保持页面和控件值时的默认方式。在页面的 HTML 被呈现之后,需要在回传期间被保持的当前页面状态会被序列化到基于 64 位编码的字符串中并且输出到视图状态的隐藏字段或隐藏字段集中。你可以改变默认的行为并把视图状态存储到另一个位置(如通过实现自定义的 PageStatePersister 类来存储页面数据的 SQL Server 数据库)中。关于胜于在隐藏页面字段中存储页面状态的数据流存储方式的实例,请参考:[PageStatePersister 类]中的实例。

在朝 Web 服务器的回传过程期间,你可以在代码中使用页面的 ViewState 属性来保持数据。ViewState 属性是一个由包含视图状态数据的 Key/Value 数据对所组成的字典。

安全提示:恶意用户能够轻松地查看并更改隐藏字段的内容。更多关于视图状态数据的信息,请参考:[保护视图状态]。

关于应该何时在视图状态中存储信息的建议,请参考:[ASP.NET 状态管理的建议]。

能够存储在视图状态中的数据类型

你能够在视图状态中存储下列类型的对象:

  • 字符串

  • 整数

  • 布尔值

  • 数组对象

  • ArrayList 对象

  • 哈希表

  • 自定义的类型转换器(关于更多的信息,请参考:[TypeConverter 类])

当然你也能够存储其他类型的数据,但是被存储的类必须使用 Serializable 参数进行编译,这样视图状态才能够把它们序列化到 XML 中。

使用视图状态时的考虑

视图状态为特定的 ASP.NET 页面提供状态信息。如果你需要在多个页面中使用这些信息,或者如果你需要状态信息能够在所有网站请求之间被持续保持,那么你应该使用另外一种状态维护的方式(如应用程序状态、会话状态或者个性化)。

视图状态信息通过使用基于 64 位编码被序列化到 XML 中。从而可能产生大量的数据。在页面被回传到服务器的时候,视图状态的内容会作为页面回传信息的一部分被发送。如果视图状态包含大量的信息,就会影响到页面的性能。因此,建议你对应用程序中使用典型数据的页面进行测试,以检测视图状态的数量是否能够导致应用程序出现性能问题。作为使用视图状态的另一种选择,请参考:[ASP.NET 状态管理的建议]。

在有些环境中(如在每次回传过程中都从数据存储中被更新的数据驱动页面),你应该关闭视图状态来删除由数据控件(如 GridView 控件)所产生的庞大的隐藏字段。

提示:即使你已经明确地关闭了视图状态,一个指示页面是否被回传的隐藏字段仍然会被发送到浏览器。

另一个重要考虑就是隐藏字段中的庞大数据,有些代理和防火墙将会防止对包含这些数据的页面进行访问。因为数量的上限会随着不同的防火墙和代理实现而变化,所以庞大的隐藏字段能够引起零星的问题。为了避免出现这种情况,如果被存储在 ViewState 属性中的数据的数量超过了在页面的 MaxPageStateFieldLength 属性中所指定的上限,那么页面会把视图状态拆分到多个隐藏字段中以减少在防火墙所限制的尺寸下的每个单独字段的大小。

有些移动设备并不支持任何的隐藏字段。因此,视图状态将无法在这些设备中工作。关于更多信息和选择,请参考:[ASP.NET 移动设备应用程序开发概览]。

控件状态

除了视图状态之外,ASP.NET 还支持一个被称作控件状态的特征。页面使用控件状态对必须在回传过程之间被保持的控件状态进行持续保持,即使在页面或者控件的视图状态被禁用的情况下也是如此。与视图状态一样,控件状态也能够把状态信息存储到一个或多个隐藏字段中。关于更多信息,请参考:[ASP.NET 状态管理概览]。

转载于:https://www.cnblogs.com/Laeb/archive/2007/01/14/620350.html

ASP.NET 状态视图概览相关推荐

  1. ASP.NET 状态管理概览

    页面每次被回传到服务器的时候都会创建 Web 页面类的一个新实例.在传统的 Web 开发中,这意味着在每次回传的过程中,页面中所有与页面和控件相关联的信息都将被丢失.例如,如果用户在一个文本框中输入了 ...

  2. RESTful之视图概览和视图说明

    一.视图概览 REST framework 提供了众多的通用视图基类与扩展类,以简化视图的编写. 视图的继承关系: 视图的方法与属性: 二.视图说明 1. 两个基类 1)APIView rest_fr ...

  3. 转:ASP.NET状态保存方法

    ASP.NET状态保存分为客户端保存和服务器端保存两种: 使用客户端选项存储页信息而不使用服务器资源的这些选项往往具有最低的安全性但具有最快 的服务器性能,因为对服务器资源的要求是适度的.但是,由于必 ...

  4. ASP.NET 状态管理概述(MSDN)

    每次将网页发送到服务器时,都会创建网页类的一个新实例.在传统的 Web 编程中,这通常意味着在每一次往返行程中,与该页及该页上的控件相关联的所有信息都会丢失.例如,如果用户将信息输入到文本框,该信息将 ...

  5. 请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同...

    异常详细信息: System.Web.HttpException: 无法向会话状态服务器发出会话状态请求.请确保已启动 ASP.NET State service,并且客户端和服务器端口是相同的.如果 ...

  6. ASP.NET状态管理之三(隐藏域HiddenField)

    ASP.NET 允许您将信息存储在 HiddenField 控件中,此控件将呈现为一个标准的 HTML 隐藏域. 隐藏域在浏览器中不以可见的形式呈现,但您可以就像对待标准控件一样设置其属性. 当向服务 ...

  7. 无法启动ASP.NET状态服务 错误0x8007277a;无法加载或初始化请求的服务提供程序

    问题:无法启动ASP.NET状态服务 错误0x8007277a;无法加载或初始化请求的服务提供程序 解决:如果在启动ASP.NET State Service服务时遇到问题0x8007277a 即无法 ...

  8. swing 状态视图分离_Java Swing模型视图适配器介体

    swing 状态视图分离 通常,我基于Spring Framework构建Java应用程序. 但是,最近有人要求我使用与语言无关的MVC框架PureMVC为客户端实现Java桌面应用程序,因此以下是我 ...

  9. 【转】【C#.NET】ASP.NET状态管理之一:Cookie

    [C#.NET]ASP.NET状态管理之一:Cookie 状态管理是你对同一页或不同页的多个请求维护状态和页信息的过程.与所有基于 HTTP 的技术一样,Web 窗体页是无状态的,这意味着它们不自动指 ...

最新文章

  1. map中批量图层的加载和展示
  2. 2018中国互联网企业100强揭晓!阿里巴巴名列榜首
  3. Linux 命令之 unrar -- 解压 rar 格式的文件
  4. [css] img标签是行内元素,为什么却能设置宽高
  5. JAVA→HashMap、常用方法、遍历方式、底层原理、初始化性能分析
  6. tortoisegit 代码的回滚方式 --两种
  7. 复杂场景下的多目标跟踪 --心得
  8. C++中对字符串操作
  9. 推荐免费下载380套大型商业源码
  10. 《房地产证》与《房屋所有权证》或《房产证》有什么区别
  11. 第八章第五题(代数:两个矩阵相加)(Algebra: adding two matrices)
  12. 如何购买并配置华为云服务器?
  13. iOS 实现二维码的彩色效果
  14. 麦克劳林级数与麦克劳林公式(泰勒公式)
  15. java 寻找峰值峰谷_Java实现 LeetCode 162 寻找峰值
  16. 中国31个主要城市的绿地数据
  17. 线性规划单纯形法python实现与代码详细解读
  18. jmeter-----使用
  19. layUI基本使用2(js)
  20. 【面试题】package有什么作用

热门文章

  1. Python中的字符串定义
  2. java系列:引用类型和基本类型
  3. SAP License:孔乙己,一名ERP顾问
  4. HiveSQL高级进阶技巧
  5. 5、UmbracoNewsSite:添加css和js文件
  6. JAVA ------- eclipse使用的步骤: %## 使用小技巧 ##%
  7. OC反射机制获得该类全部属性并创建数据表
  8. FZOJ2110: Star
  9. PHP curl 参数详解
  10. WebGraph++编译