-
1 任务一 使用...
-
2 拓展知识
拓展使用多种方式进行状态管理
通过任务一学习,你需要掌握和了解以下内容:
1.学会使用基于客户端的状态管理
2.学会使用基于服务器的状态管理
【任务要点】
1.学会使用基于客户端的状态管理
2.学会使用基于服务器的状态管理
【案例一】使用Application统计网站的访问情况:
①页面单击数,页面被单击一次访问量加1,不管是否是同一个用户多次单击页面;
②用户访问数,来一个用户访问量就加1,一个用户打开多个页面不会影响这个数字。
【具体步骤】
(1)右击网站,在弹出的快捷菜单中选择【添加新项】命令,如图1-1所示,在弹出的对话框中选择【全局应用程序类】选项。

(2)Global.asax是一个用来处理应用程序全局的事件。打开文件,系统已经定义了一些事件的处理方法。详见课本。
(3)需要在Application_Start中去初始化两个变量。

(4)用户访问数根据Session来判断,因此可以在Session_Start的时候去增加这个变量。

(5)页面单击数则在页面Page_Load的时候去修改。

【案例二】
在用户登录时,将用户名等登录信息存储在Session变量中,应用程序的其他页面可以访问该变量。如图1-2和图1-3所示。

图1-2

图1-3
【具体步骤】

(2)在Login.aspx.CS文件的btnLogin_Click中填写代码。

(3)创建Welcome.aspx,并在后置代码的Page_Load事件处理程序中添加代码。
【案例三】
记录某台机器访问页面的次数,访问的次数存入客户端的Cookie中,如图1-4所示。

【具体步骤】
(1)创建页面cookie.aspx。
(2)设计cookie.aspx的界面。
①在“属性”窗口里,把Document的Title属性改为“访问计数器”。
②添加一个Label控件,拖动到页面中的适当位置,并把Label控件的ID属性设置为message,Text属性设置为空。
③打开cookie.aspx.cs的代码编辑窗口,为Page_Load()添加代码。

④按F5键,可看到程序的执行结果。
【案例四】
使用ViewState保存用户单击按钮的次数,执行结果如图1-5所示。

【具体步骤】
(1)设计Web页面。
新建一个ASP.NET网站,向页面中添加必要的控件说明文字:添加1个按钮控件Button1;1个标签控件Label1,如图1-6所示。

(2)编写事件代码。

【背景知识】
一、状态管理概述
状态管理是对同一页或不同页的多个请求维护状态和页信息的过程。与所有基于HTTP的技术一样,Web窗体页是无状态的,这些窗体不自动指示序列中的请求是否全部来自相同的客户端,或者单个浏览器实例是否一直在查看页或站点。此外,到服务器的每一往返过程都将销毁并重新创建页,因此,如果超出了单个页的生命周期,页信息将不存在。比如,在代码中声明一个DataSet从数据库获取记录,页面回发(也就是重新请求)后这个DataSet是空的,这就是为什么在ASP.NET应用程序中,甚至在一个页面中需要多次连接数据库获取记录。由于以上原因,状态管理对于Web编程来说非常重要,从第一代动态Web编程语言开始就支持多种状态管理以弥补HTTP无状态的不足。
现在的Web应用程序,通常都是数据驱动的,但是在状态处理中,应该尽量减少对数据库的依赖,原因有以下几点:
(1)数据库是存放在磁盘上的,如果把数据都存放在数据库中的话,存取速度和性能会比较差;
(2)很多数据是和用户相关的,但是没有一个唯一的标志来区分哪条记录对应哪个客户端(浏览器);
(3)很多数据是临时的,用户关闭了浏览器这些数据就不再需要了,如果把数据存放在数据库中的话,会不知道是哪个用户关闭了浏览器,也就不能及时把数据删除。
通常来讲,状态管理的作用主要概括为以下几点:
(1)指示用户信息,关联浏览器实例;
(2)使得页与页之间,请求与请求之间能够共享信息;
(3)更为快速的数据存储与读取。
二、基于服务器的状态管理
ASP.NET提供了多种方法用于维护服务器上的状态信息,而不是保持客户端上的信息。通过基于服务器的状态管理,为了保留状态,可以减少发送给客户端的信息量。主要包括两种方式:应用程序状态和会话状态。
1.应用程序状态
应用程序状态(Application)是应用于整个应用程序的,由于它的访问速度非常快而且只要应用程序不停止,数据就一直存在,所以通常在Application_Start的时候去初始化一些数据,在以后的访问中可以迅速地访问和检索。
2.会话状态
会话状态(Session)用于保存每个用户的专用信息。Session中的信息保存在Web服务器内容中,保存的数据量可大可小。当Session超时或被关闭时将自动释放保存的数据信息。
三、基于客户端的状态管理
基于客户端的状态管理是将数据存储在客户端上以保持状态信息从而进行状态管理,它常见的实现方式包括:Cookie、视图状态、控件状态、隐藏域、查询字符串、Cache几种方式。
1.Cookie
Cookie是一小段文本信息,提供了一种存储用户特定信息的方法,伴随着用户请求和页面在Web服务器和浏览器之间传递。当访问某站点时,浏览器在获得页面的同时也获得了Cookie,并将它存储在用户硬盘上的某个文件夹中,Cookie能够帮助网站存储有关访问者的信息。Cookie可以是临时的(具有特定的过期时间和日期),也可以是永久的。
2.隐藏域
ASP.NET允许将信息存储在HiddenField控件中,此控件呈现为一个标准的HTML隐藏域。隐藏域(HiddenField)在浏览器中不以可见的形式呈现,但可以像标准控件一样被设置其属性。当向服务器提交页时,隐藏域的内容将在HTTP窗体集合中随同其他控件的值一起发送。
3.视图状态
视图状态(ViewState)是ASP.NET页框架默认情况下用于保存往返过程之间的页面信息以及控件值的方法。
4.控件状态
控件状态(ControlState)允许保持特定于某个控件的属性信息,且不能像ViewState那样被关闭。
5.查询字符串
查询字符串的方式是将要传递的值连接在URL后面,然后通过Response.Redirect方法实现客户端的重定向,这种方式可以实现在两个页面之间传递信息。


