欢迎来到天天文库
浏览记录
ID:36322748
大小:429.31 KB
页数:18页
时间:2019-05-09
《asp应用程序状态管理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第6章ASP.NET应用程序状态管理如果读者曾经有过开发Windows应用程序的经验,可能不太会留意维护应用程序状态,因为应用程序本身就在客户端运行,可以直接在内存中维护其应用程序状态。但是对于ASP.NET应用程序来说,事情不那么简单了,因为ASP.NET应用程序在服务器端运行,客户端使用无状态的HTTP协议对ASP.NET应用程序发出请求,ASP.NET应用程序响应用户请求,向客户端发送请求的HTML代码,服务器并不会维护任何客户端状态。考虑一个有着成千上万并发用户的服务器,如果为每个用户都维护
2、状态的话会耗费非常多的资源。对于一个Web应用程序来说,通常需要维护应用程序的状态。比如电子商务网站的购物车,当客户在多个页面中选择商品时,需要为其维护一个所选商品的列表。ASP.NET为解决状态维护的问题提供了多种方法,本章将详细讨论如何使用这些方法为ASP.NET应用程序添加状态管理功能。6.1ASP.NET状态管理简介由于使用无状态的HTTP协议作为Web应用程序的通信协议,当客户端每次请求页面时,ASP.NET服务器端都将重新生成一个网页的新实例。这意味着客户端用户在浏览器中的一些状态或者是
3、一些修改都将丢失。比如一个客户管理系统,用户在很多文本框中输入了内容,当点击提交按钮到服务器后,从服务器返回的将是一个全新的网页,用户所添加的内容将全部丢失。记得在使用ASP的时候,笔者为了保存每个文本框控件中的值信息,在数据提交前使用了大量的Session变量来保存每个文本框的值,并在页面重新生成后将这些会话变量中的值一一赋给每个控件。这是一件相当费时费力的工作,可谓事倍功半。在ASP.NET最初推出以后,让笔者眼前一亮的是,当页面回发(Postback)后,控件依然能保存其输入的值,ASP.NE
4、T使用ViewState技术,也称为视图状态为控件保存了状态信息,ASP.NET中提供了如下几大用于状态管理的技术:6.2ViewState视图状态视图状态可以说是应用最为广泛的一种技术,几乎每个ASP.NET服务器控件都具有EnableViewState属性,允许控件在页面回送时保存其属性值。开发人员也可以使用Page.ViewState集合类添加自己的状态数据,可以使用这个属性保存简单的数据类型或者是自定义的对象类型。例如可以使用视图状态保存一个计数器的值,代码如下:protectedvoidP
5、age_Load(objectsender,EventArgse){ViewState["Counter"]=5;}可以看到ViewState是一个字典类型的对象,使用ViewState[key]=value的格式来设置值,如果在集合中存在指定键的值,则进行替换,否则将自动创建一个新的键值对。6.2.1视图状态原理应用程序在运行时,ASP.NET引擎会自动在源代码的尾部嵌入的一个隐藏域(HiddenField),命名为_VIEWSTATE。_VIEWSTATE以键/值对集合的形式保存页面中控件的状态
6、数据,_VIEWSTATE将这些值以Base64编码格式编码字符串,如下代码所示:6.2.2在视
7、图状态中存储对象在ViewState中,可以存储用户自定义的对象数据,但是必须知道,当存储一个自定义对象时,ASP.NET必须能够转换该对象为字节流以便于将对象添加到页面隐藏域中进行保存。这意味着自定义对象必须支持序列化,否则ASP.NET将会抛出异常。下面创建一个名为ViewStateSample的ASP.NETWeb站点,右击网站项目名称,选择“添加新项”菜单项,添加一个新的类,命名为Book.cs,如图所示:6.2.3视图状态的安全ViewState中的数据以Base64编码的格式保存在客户端
8、浏览器中,目前,可以使用很多工具解码Base64编码的字符串,例如可以使用一款名为ViewStateDecoder的工具来直接查看视图状态的数据结构,如图所示。6.3跨页传递信息使用视图状态有一个很大的限制就是不能跨页传递信息,如果用户导航到其他页面,那信息将会被丢失。本节将讨论如何在多个页面之间传递信息,可以使用查询字符串或者是跨页提交技术。如果这些技术都不能满足应用程序的要求,那么可以考虑使用cookies、会话状态或者是应用程状态,本章以后将会详细的讨论。6.3
此文档下载收益归作者所有