快速业务通道

ASP.NET控件开发基础(11)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21

31 }
32}

下面再看如何在Custom类中自定义属性状态管理,当你定义了复杂类型时,你就需要重写上面的几个方法.

具体代码如下:

首先我们对属性进行视图状态的跟踪,然后重写了Control类的三个方法.其一方面调用了基类方法,一方面调用了Addres类的显示接口方法.

Pair类为一个辅助类,用作存储两个相关对象的基本结构,下面根据调试结果来理解.在Custom类中对其三个方法设置断点.

public Address CustomAddress
     {
       get
       {
         if (address == null)
         {
           address = new Address();
           if (IsTrackingViewState)
           {
             ((IStateManager)address).TrackViewState();
           }
         }
         return address;
       }
     }

自定义视图状态#region 自定义视图状态

protected override void LoadViewState(object savedState)
     {
       Pair p = savedState as Pair;
       if (p != null)
       {
         base.LoadViewState(p.First);
         ((IStateManager)CustomAddress).LoadViewState(p.Second);
         return;
       }
       base.LoadViewState(savedState);
     }

     protected override object SaveViewState()
     {
       object baseState = base.SaveViewState();
       object thisState = null;

       if (address != null)
       {
         thisState = ((IStateManager)address).SaveViewState();
       }

       if (thisState != null)
       {
         return new Pair(baseState, thisState);
       }
       else
       {
         return baseState;
       }

     }

     protected override void TrackViewState()
     {
       if (address != null)
       {
         ((IStateManager)address).TrackViewState();
       }
       base.TrackViewState();
     }
     #endregion

设置断点以后,启动起始页开始测试.

启动后第一步将会跳到Custom类的TrackViewState方法里面,执行完此方法后IsTrackingViewState将设置为true,

从而可以继续调用address的TrackViewState方法,另外可以看到address属性为空值,然后按F5,通过此方法继续

第二步将会跳到Custom类的SaveViewState方法里,发现baseState和thisState均为空,直接执行基类方法.按F5继续

第三步将会跳到Address类的TrackViewState方法里,_isTrackingViewState初始化时为false,执行此方法后将赋值为ture,然后调用_viewState的TrackViewState方法.

初始化的工作就完成了,然后我们点击确定按钮,重新执行.

重新跳到Custom类的TrackViewState方法里,步骤跟上面第一步一样,按F5,继续

跳到Address类的TrackViewState方法里,步骤跟上面第二步一样,按F5继续

跳到Custom类的SaveViewState方法里,此时address不再为null,此时会返回Pair构造函数.

然后会跳到Address类SaveViewState方法里,接着会跳回来,再执行Custom类的SaveViewState方法

以上调试方法不一定正确,但多调用会理解的更深刻.

我们还发现并未跳到LoadViewState方法里,以前的主要工作就是保存视图状态更改,接下来再次调试的话,就会跳到LoadViewState方法方法里面,这时你会发现savedState就是SaveViewState方法中保存下来的视图状态,可以

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号