选择显示字体大小

asp.net服务器控件之视图状态

  为web页面及其控件保持状态信息是非常有必要的。然而,由于web应用程序创建于http协议的顶层,这是一个无状态的协议,因此,保持状态信息则变得非常困难。为了解决这个问题,asp.net 2.0技术提供了多种解决方案,例如,利用session、cookie、视图状态、控件状态、隐藏域、查询字符串、个性化用户配置(profile)等等。对于利用asp.net 2.0技术创建服务器控件而言,保持状态信息也是非常重要的,其主要解决途径是利用视图状态和控件状态。本文详细讲解了视图状态(viewstate)的基本知识,并通过典型应用介绍视图状态的应用方法。

  视图状态概述

  视图状态是一项非常重要的技术,它能使得页面和页面中的控件在从服务器到客户端,再从客户端返回的往返过程中保持状态信息。这样就可以在web这种无状态的环境之上创建一个有状态并持续执行的页面效果。本节主要介绍有关视图状态的运行机制、应用方法、存储的数据类型、性能和安全性、视图状态分块(这是asp.net 2.0的新特性)和优缺点等内容。

  (1)运行机制

  视图状态的具体运行过程为:每当用户请求某个.aspx页面时,.net框架首先把相关控件的状态数据序列化成一个字符串,然后,将其做为名为__viewstate的隐藏域的value值发送到客户端。如果页面是第一次被请求,那么服务器控件也将是被第一次执行时,名为__viewstate的隐藏域中只包含控件的默认信息,通常为空或者null。在随后的回送事件中,viewstate中就保存了服务器控件在前面回送中可用的属性状态。这样服务器控件就可以监视在当前被处理的回送事件发生之前的状态了。这些过程是由.net框架负责的,对用户来说是执行.aspx页面就有了持续执行的效果。

  (2)存储的数据类型

  视图状态可以存储多种类型的数据,并且为了提高运行效率,视图状态自身还包括一套已经优化的针对常用类型的序列化方式。视图状态序列化方式默认支持的数据类型包括以下几种:string、int32、unit、color、array、arraylist、hashtable和自定义类型转换器typeconverter。

  视图状态已经为array、arraylist和包含上面列出类型的hashtable对象进行了优化。因此,当在控件中使用视图状态时,应该试着限定于使用以上简单数据类型,以及经过优化的类型。在此,需要重点说明一下自定义类型转换器typeconverter,它提供了一种将值的类型转换为其他类型以及访问标准值和子属性的统一方法。例如,可以利用typeconverter将字符串转换为数值,或者将数值转换为字符串。如果没有类型转换器,那么页面框架会使用.net框架提供的二进制序列化功能来序列化对象,这个过程是非常耗费资源的。

  (3)性能和安全

  使用视图状态时,对象必须先序列化,然后再通过回传进行反序列化。因此,我们必须了解有关viewstate性能的内容。默认情况下,控件的viewstate将被启用,如果不需要使用viewstate,最好还是将它关闭。以下情况将不再需要viewstate:(1)控件未定义服务器端事件(这时的控件事件均为客户端事件且不参加回送的);(2)控件没有动态的或数据绑定的属性值。关闭视图状态的方法是将控件的enableviewstate的值设置为"false",即enableviewstate="false"。

  默认情况下,视图状态的有关内容在编译运行发送给客户端时,读者将在页面的html代码中看到__viewstate隐藏域内容。这是一些没有意义的字符串,是.net框架通过base64位编码对相关内容编码的结果。它们是通过明文方式在客户端和服务器端之间往返传送。在某些情况下,例如涉及密码、账号、连接字符串等敏感内容时,使用默认方式是很不安全的。为此,.net框架为viewstate提供了两种安全机制:

  · 校验机制:

  可以通过设置enableviewstatemac="true"属性来指示.net框架向viewstate数据中追加一个散列码(该散列码是一种sha1类型,长度有160位,因此会严重影响执行性能)。在回传事件发生时,将重新建立该散列码,它必须和最初的散列码匹配。通过这种方式,能够有效检验viewstate是否在传送过程中能够被篡改。默认情况下,.net框架使用sha1算法来生成viewstate散列代码。此外,也可以通过在machine.config文件中设置<machinekey>来选择 md5 算法,如下所示:<machinekey validation="md5" />。md5算法的性能要比sha1算法好一些,但是同样不够安全


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons