选择显示字体大小

asp.net2.0的控件状态和视图状态探讨(3)

     分析总结
  
    从msdn上的一系列的技术参考来看,controlstate应该是主要在自定义控件上使用,“asp.net框架提供了 controlstate 属性作为在服务器往返过程中存储自定义控件数据的方法”,这是msdn上的原句,asp.net2.0只是为controlstate提供了一个基础,当controlstate是一个自定义的状态保持机制,也就是说保持状态的机制需要你开发人员自己去完成,而不像viewstate,它有自己默认的状态保持机制。在自定义控件使用controlstate也许才是微软本意了,为的就避免在页面级别禁用掉viewstate后,自定义控件还能正常运行。当然这里的意思就是,某些控件的正确运行是依赖于它的状态信息的,在asp.net1.1中,如果禁用了viewstate,这样的控件就无法正确运行了。但引入了controlstate后就不同了,因为controlstate是禁用不掉的。
   
    所以微软才提醒开发人员“请仅对那些在回发过程中对控件至关重要的少量关键数据使用控件状态,而不要将控件状态作为视图状态的备用选项使用”。明确说出,controlstate和viewstate完全是两个东西,虽然它们可以完成相同的任务,新推出的controlstate既不是用来替代viewstate也不是用来做viewstate的替补。它的使命是弥补viewstate的所不能完成的任务,让开发人员开发出更加健壮的控件。例如说,开发的自定义控件某个状态是至关重要的,缺少它就自定义控件不能正常工作,那么controlstate就该上场了。而且controlstate是自定义的状态保持机制,也限制了controlstate自由的使用,你不但要在oninit 方法并调用 registerrequirescontrolstate 方法向页面注册,而且要重写saveadaptercontrolstate(),loadadaptercontrolstate(object state)两个方法自己去实现要保存什么,怎样保存。根据我现在的理解,如果你需要保存该控件的10种不同状态,那你就得一一保存,再一一加载上去。从这点也就看出了微软的初衷了,那不是很明显吗,如果不需要controlstate那就不使用它吧,否则怎么它什么都让我们开发人员去做呢?
  
    这只是基础了,刚才我说了,似乎微软也是这么说的,controlstate针对的是自定义控件,其实我们真的要去开启基本控件例如label控件的controlstate,微软也是允许的,这就是稍深的内容了,这就涉及到控件适配器了(controladapter)。如果需要了解这方面的内容,请看用控件适配器开启基本控件的controlstate。http://sifang2004.cnblogs.com/archive/2006/06/01/415288.html
  
    附录
  
    为了更加充分理解上面的内容,需要对以下内容有个了解:
  
    pair 类
  
    用作存储两个相关对象的基本结构。它是在整个 asp.net 中(在如页面状态管理任务期间或配置节处理程序的过程中)有多种用法的实用工具类。可以在自己的代码中需要包含两个相关对象的结构的任意位置和不一定需要数据绑定的位置使用 pair 类。pair 类不将其对象引用 first 和 second 封装在属性中;该类直接将它们作为公共类字段公开到所有调用代码。
  
    pair 类在页状态保留实现中有多种用法。最常见的用法是同时作为 viewstate 和 controlstate 集合的容器。在这种情况下,first 属性用于 viewstate,而 second 用于 controlstate。
  
    pagestatepersister 类
  
    http 请求和响应原本是无状态的。要在 http 请求之间保持状态信息,asp.net 服务器页可以存储 page 状态。此状态称为视图状态,它包含页和控件设置及数据,这些设置和数据使得页和控件看起来就像在上一次将它们提交到服务器然后又返回到客户端时,用户所看到并与之交互的页和控件一样。有几种机制可在对相同页的连续请求之间存储视图状态。pagestatepersister 抽象类表示这些状态信息存储机制的基类。
  
    要在不能支持现有视图状态持久性机制的客户端上保留视图状态,可以扩展 pagestatepersister 类,引入您自己的视图状态持久性方法,并且可以使用页适配器将 asp.net 应用程序配置为根据为其提供页的客户端的类型使用不同的视图状态持久性机制。从 pagestatepersister 类派生的类必须重写 save 抽象方法,以便在持久性介质中存储视图状态和控件状态,同时重写 load 方法以提取状态信息。如果想知道如何写pagestatepersister的派生类,请参考视图状态持久性机制。
  
    


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

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