状态是某一类型的数据在一定时期内保持活跃的信息。这里说的一定时期可以使整个应用程序的生命周期,可以使用户操作程序的时间,当然也可以是单个页面的生命周期等。
   为了解决传统Web编程中固有的限制,ASP.NET提供了按页面保留数据和在整个应用程序范围内保留数据的功能,这些具体功能如下:(其中1到5是以不同方式将数据存储到客户端上,6到8是将数据存储到服务器上的内存中)

  一、视图状态
  ViewState属性提供一个字典对象,用于在对同一页的多个请求之间保留值。它是页用来在往返行程之间保留页和控件属性值的默认方法。
  当将页面回发至服务器时,页面会在页的初始化阶段分析视图状态字符串,和原页中的属性信息。也可以使用视图状态来存储值。
  视图状态提供了特定ASP.NET页的状态信息。如果需要在多个页上使用信息,或者如果需要在访问网站时保留信息,则应当使用另一个方法(如应用程序状态、会话状态或个性化设置)来维护状态。
  注意:视图状态信息将序列化为XML,然后使用Base64编码进行编码,这将生成大量的数据。将页回发到服务器时,视图状态的内容将作为页面回发信息的一部分发送。如果视图状态包含大量信息,则会影响页的性能。
在某些情况下(如数据驱动页在每次回发时从数据存储区进行刷新),应当关闭视图状态以移除由数据控件(如GridView控件)生成的大量隐藏字段。
   换句话说,我们要尽量避免在前台使用视图状态,如果可能的话,可以用input的控件,这样可以提高网站的性能。
   存储在视图状态中的数据类型如下:字符串、整数、布尔值、Array对象、Arraylist对象、哈希表、自定义类型转换器。

  使用视图状态具有以下3个优点:
  一、耗费的服务器资源较少(与Application、Session相比):因为,视图状态数据都写入了客户端计算机中。
  二、易于维护:在默认情况下.NET系统自动启用对控件状态数据的维护。
  三、增强的安全功能:视图状态中的值经过哈希计算和压缩,并且针对Unicode实现进行编码,其安全性要高于使用隐藏域。
  使用视图状态具有以下3个缺点:
  一、性能注意事项:如果存储较大的值,用户显示页和发送页时的速度减慢。
  二、设备限制:移动设备可能没有足够的内存容量来存储大量的视图状态数据。
  三、潜在的安全风险:视图状态存储在页上的一个或多个隐藏域中。虽然视图状态以哈希表格式存储数据,但它可以被篡改。
加密视图状态:在@ Page指令中,将ViewStateEncryptionMode属性设置为

<% @Page ViewStateEncryptionMode="Always"...  %>

  

二、控件状态

  三、隐藏域
  ASP.NET允许将信息存储在HiddenField控件中,此控件将呈现为一个标准的HTML隐藏域。隐藏域在浏览器中以不可见的形式呈现,但可以像对待标准控件一样设置其属性。
  当向服务器提交页面时,隐藏域的内容将在HTTP窗体集合中随同其它控件的值一起发送。隐藏域可用作一个储存库,可以将存储到页中的任何特定于页的信息放置其中。

  四、客户端Cookie
  Cookie可以保存少量的数据,这些数据或者存储在客户端文件系统的文本本件中或者存储在客户端浏览器会话的内存中。
  当浏览器请求某页面时,客户端会将Cookie中的信息连同请求信息一起发送。服务器可以读取Cookie并提取它的值。
  用法如下:
第一种存储:

//HttpCookie hc = new HttpCookie("user");//创建Cookie对象
//hc["Name"]=TextBox1.Text;
//hc["Pwd"] = TextBox2.Text;
//hc.Expires=DateTime.Now.AddDays(1);
            //设置Cookie的过期时间(在现在的时间上加,如果删除,则加一个负数)
//Response.Cookies.Add(hc);

第二种存储:

//直接指定Cookie对象
//Response.Cookies["user"]["Name"] = TextBox1.Text;
//Response.Cookies["user"]["Pwd"] = TextBox2.Text;
//Response.Cookies["user"].Expires = DateTime.Now.AddDays(1);
(注:存储时,都用的是Response)
接收时:用Request接收
//if(Request.Cookies["user"]!=null)
//{
// Response.Write("用户名:"+Request.Cookies["user"]["Name"]+"<br/>");
// Response.Write("密码:"+Request.Cookies["user"]["Pwd"]);
//}

  五、查询字符串
  查询字符串是在页面URL的结尾附加的信息。
  查询字符串提供了一种维护状态信息的方法,这种方法很简单,但是有使用上的限制。利用查询字符串功能可以很容易地将信息从一个页面传送到另一个页面。
用法如下:
传递时:在URL后加?

if (Request.Form["TextBox1"] !="")
{
Response.Redirect("Main.aspx?username="+Request.Form["TextBox1"]);
}

接收时:用Request

<%= Request["username"]%>

  以下是基于服务器的状态管理:

  六、应用程序状态
  ASP.NET允许使用应用程序状态来保存每个活动的Web应用程序的值,应用程序状态是HttpApplicationState类的一个实例。
  应用程序状态存储在一个键/值字典中,在每次请求一个特定的URL期间都会创建这样一个字典。可以将特定于应用程序的信息添加到此结构以在页请求期间存储它。一旦将应用程序特定的信息添加到应用程序的状态中,服务器就会管理该对象。

  七、会话状态(Session)
  ASP.NET允许使用会话状态保存每个活动的Web应用程序的会话值,会话状态是HttpSessionState类的一个实例。
  会话状态与应用程序状态相似,不同的是会话状态的范围限于当前的浏览器会话。如果有不同的用户在使用应用程序,则每个用户会话都将有一个不同的会话状态。

  八、配置文件属性
  ASP.NET提供了一个称为配置文件属性的功能,可以存储特定于用户的数据。此功能与会话状态类似,不同的是,在用户的会话过期时,配置文件数据不会丢失。
  若要使用配置文件属性,必须对配置文件提供程序进行配置。ASP.NET包括一个SqlProfileProvider类,使你能够将配置文件数据存储到SQL数据库中,但你也可以创建自己的配置文件提供程序类,用于以自定义格式将配置文件数据存储到自定义存储机制。

文章来源:http://kb.cnblogs.com/page/75582/

ASP.NET中的状态保持(转载)的更多相关文章

  1. ASP.NET中的状态保持

    1.ASP.NET中的状态保持解决方案 2.常用的状态报保持方式 view state  ASP.Net的.aspx页面特有,页面级的,就是在页面上的一个隐藏域中保存客户端单独使用的数据的一种方式(b ...

  2. 转:ASP.NET中的SESSION实现与操作方法

    在ASP.NET中,状态的保持方法大致有:ApplicationState,SessionState,Cookie,配置文件,缓存. ApplicationState 的典型应用如存储全局数据. Se ...

  3. Asp.net 中ViewState,cookie,session,application,cache的比较

    Asp.net 中的状态管理维护包含ViewState,cookie,session,application,cache五种方式,以下是它们的一些比较: 1.存在于客户端还是服务端 客户端: view ...

  4. 转载MSDN 在ASP.NET 中执行 URL 重写

    转载文章原网址 http://msdn.microsoft.com/zh-cn/library/ms972974.aspx 摘要:介绍如何使用 Microsoft ASP.NET 执行动态 URL 重 ...

  5. 【转载】ASP.NET中Server.MapPath方法获取网站根目录总结

    在ASP.NET网站应用程序中,可以通过Server.MapPath方法来获取跟服务器有关的目录信息,如获取网站的根目录.获取当前代码文件所在的目录路径.获取当前代码所在路径的上级路径等.Server ...

  6. 【转载】Asp.Net中使用基于jQuery的javascript前台模版引擎JTemplate

    JTemplate是基于jQuery的开源的前端模版引擎,在Jtemplate模板中可以使用if判断.foreach循环.for循环等操作,使用Jtemplate模板优点在于ajax局部刷新界面时候不 ...

  7. 【转载】Asp.Net中Cookie对象的作用以及常见属性

    Cookie对象是服务器为用户访问存储的特定信息,这些信息一般存储在浏览器中,服务器可以从提交的数据中获取到相应的Cookie信息,Cookie的最大用途在于服务器对用户身份的确认,即票据认证,用户会 ...

  8. 【转载】Asp.Net中应用程序的事件响应次序

    Asp.Net应用程序事件响应次序是指Application事件的相应次序,涉及到的事件包括Application_Start事件.BeginRequest事件.AuthenticateRequest ...

  9. asp.net中的<%%> <%#%> <%=%>形式的详细用法 (转载)

    博客分类: ASP.NET   一. <%%>这种格式实际上就是和asp的用法一样的,只是asp中里面是vbscript或者javascript代码,而在asp.net中是.net平台下支 ...

随机推荐

  1. asterisk中eyebeam与移动的IMS帐号对接

    账号和密码: 05128068****       xbfldz6658****IP:120.195.9.148域名:ims.js.chinamobile.com    上图吧:

  2. Liferay中SQL打印参数

      XX\tomcat-7.0.42\webapps\ROOT\WEB-INF\classes\log4j.properties log4j.rootLogger=INFO, CONSOLE log4 ...

  3. 20145305 《Java程序设计》第9周学习总结

    教材学习内容总结 1.厂商在操作JDBC驱动程序时,依方式可将驱动程序分为4种类型: JDBC-ODBC Bridge Driver Native API Driver JDBC-Net Driver ...

  4. 用 <a> 实现 <form> 表单的提交

    <form action="{:U('Index/fwbhss')}" method="post" id="tform" name=& ...

  5. C Primer Plus(第五版)8

    第 8 章 字符输入/输出和输入确认 在本章中你将学习下列内容: · 有关输入,输出以及缓冲和非缓冲输入之间的区别的更多内容. · 从键盘模拟文件结尾条件的方法. · 如何重定向将你的程序与文件相连接 ...

  6. Node.js解析Excel

    1.使用node-xlsx包 var xlsx = require('node-xlsx'); 只支持xlsx格式 2.解析的Excel文件格式如下: 3.程序如下: var obj = xlsx.p ...

  7. 共享池之八:软解析、硬解析、软软解析 详解一条SQL在library cache中解析涉及的锁

    先来张大图: 结合上图来说明一下解析的各个步骤涉及的锁. 软解析.硬解析.软软解析区别的简单说明: 为了将用户写的sql文本转化为oracle认识的且可执行的语句,这个过程就叫做解析过程. 解析分为硬 ...

  8. css first-letter实现首字(字母)下沉效果

    css 首字下沉效果原理 首字下沉主要使用到css的first-letter伪元素,然后配合使用font-size和float来设置文字的样式即可实现. first-letter选择器选取指定元素文本 ...

  9. sqlserver添加用户的时候出现 错误18456

    1.用本机默认的window身份验证登录 2.登录成功后,在数据库->安全性->登录名->右键属性->如图选择“新建登录名” 3.在如图所示的登录名中,输入将要新建的登录用户, ...

  10. win8 C 盘 突然少了 十几G 空间 原因,解决方法

    原因: win8 默认最大虚拟内存为 16G多,但现在电脑本身内存就大,所以应该不用了.我现在电脑本身内存是16G. 如果C盘空间大,这个无所谓了,如果C盘空间小可以按以下操作,拿回16G空间: 解决 ...