ASP.NET控件开发基础(11)
讲的很清楚了.你可以保存一些简单类型,但无法保存自定义类型,而我们定义的Address就是一个自定义类型.为保存自定义类型数据,所以我们需要自定义类型状态管理
自定义类型状态管理,那么我们就必须接触到IStateManager这个接口,此接口有一个属性和三个方法,如下 所以Address要继承IStateManager接口,并显示实现接口属性和方法,注意是显示实现 . 下面看Address类具体的自定义状态管理代码 自定义状态管理#region 自定义状态管理
理解控件自定义的状态管理,你有必要了解控件的生命周期,了解控件生命周期,那问题就迎刃而解了. 大家可以翻阅MSND的控件执行生命周期 我个人认为最好的理解方法就是为上面代码设置三个断点, 如下图 好了,下面把我们测试的那个aspx页面设置为起始页,然后按F5,开始测试. 本该启动后跳到TrackViewState方法里,但没跳进来,好怪,而且自定义类型状态管理后页面并未保存其值. 让我们回到Custom类里,我们还需要为属性(复杂属性)定义状态管理. 本身Control也有一套默认的状态管理机制,而没有实现IStateManager接口 , 其实现如下: 对下面代码我认为是错误的,因为书上全是这么写的,我认为因先把_viewState显示转换为IStateManager类型, 因为StateBag本身是继承IStateManager接口,但MSDN中,我并没看到其实现IStateManager的方法,而是显示的实现,当我用反射机制查看其方法时,却又发现是有其方法的,但当你不把StateBag显示转换为IStateManager类型,而直接调用下面方法时,将会出错.如果书上是对的,还请看到此文的人指点一下,对此我已经疑惑很长时间了. 如果我是对的,那下面的_viewState因先显示转换为IStateManager类型,事实上我们都是这么做的.
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |