ASP.NET服务器控件之视图状态
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,它提供了一种将
相关文档:
<asp:DropDownList ID="compactType" runat="server" AutoCallBack="True" Width="153px"> </asp:DropDownList>
<?xml version="1.0" encoding="utf-8" ?>
<roots>
<root>
<id>1</id>
<Culture> ......
前台代码:
<script type="text/javascript">
<%=LoadImage() %>
imgUrl1="uploads/"+ImgSrc[0];
imgtext1=ImgAlt[0]
imgLink1=escape("adimg.aspx?Img_ID="+ImgUrl[0]);
imgUrl2="uploads/"+ImgSrc[1];
imgtext2=ImgAlt[1]
imgLink2=escape("adimg.aspx?Img_ID="+ImgUrl[1]);
imgUrl3=" ......
<script type="text/javascript">
var loginName,checkUN,password,confirmPwd,email,subBtn,userName,checkTel,tel;
$(init);
function init()
{
loginName = $("#loginName");
loginName.bind("blur",checkUserName);
password = $("#password"); ......
public partial class shujuku_huanyuan : System.Web.UI.Page
{
SqlConnection conn = new SqlConnection(@"server=HUAZD-33\XXD33;uid=sa;pwd=111111;database=master;");
protected void Page_Load(object sender, EventArgs e)
&nbs ......
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using ......