探讨ASP.NET 2.0中的Web控件改进技术
为你最坏的敌 人—这要依赖于你使用它的方式来决定。如果你在以前曾经使用过ViewState, 那么,你肯定会喜欢新的ControlState。
关于ViewState的最令人头痛的问题之一就是,它的“all-or-nothing”状态 管理方法。页面开发者可以很容易地决定在任何控件级,页面级或在整个站点级 (经由web.config)上关闭ViewState。事实上,如果你在整个站点级上通过 web.config关闭ViewState的话,那么,你不妨猜测一下你还能够在其它什么地 方关闭它?答案是:还可以在machine.config中实现—在此情况下,它能够影响 到同一服务器上的所有站点。如果一个页面开发者决定关掉在ViewState中实现 状态管理的能力,那么,你的控件生成有可能出现部分不可用,或更有甚者—完 全不可用。 为此,在新版本中,微软创建了ControlState—旨在解决这一问题。页面开 发者不能关掉ControlState,因此使用它进行属性选择更为安全。 使用ControlState与使用ViewState几乎完全一致。然而,ControlState并没 有提供象ViewState这样的一个变量,而是提供了称为SaveControlState和 LoadControlState的方法以便于你的控件能够进行重载。这些方法与 SaveViewState和LoadViewState方法的工作原理完全一致。 因为ControlState在属性语句中没有提供一个相应的变量,所以,你必须借 助于ASP.NET开发者以前在他们的对象中所使用的成员变量(属性语句)来实现相 同的功能。
然而,因为我使用了一个标准的成员变量来保存值,所以我需要一种方法以 便把数据存储在ControlState中—这正是前面提到的方法“登场”的原因。就象 在它们相应的ViewState方法中那样,ASP.NET将在页面生命周期内调用这两个方 法。其中,SaveViewState方法返回一个将被持久存储的对象类型。通过返回一 个对象数组,这个方法可以存储多个值。并且,就象发生在SaveViewState方法 中一样,也是使用数组的0下标元素来调用基类的SaveControlState方法。
注意:LoadControlState方法以一个对象作为参数—这个对象是以前在 SaveControlState中返回的一个对象。在这个方法中,我重新分配了成员变量— 通过把该参数转换为一个对象数组,然后获得每个下标的值。与以前一样,我使 用数组的0下标来调用基类的LoadControlState方法。
借助于这些方法来存储数据,在页面开发者关掉ViewState时,控件就不会出 现前面那些麻烦。 你可能对ControlState的存储位置感到惊讶;它对应于另一个生成到HTML页面 中的隐藏的文本框。就象在ViewState情况下数据被存储在__ViewState隐藏文本 框中类似,ASP.NET 2.0使用__ControlState隐藏文本框来存储ControlState数 据。 遗憾的是,微软没有向开发者提供内在地使用ControlState的能力—就象在 ViewState情况下那样。所以,为了ControlState使用,你需要注册你的控件。 你可以重载控件的OnInit事件并且调用Page对象的 RegisterRequiresControl |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |