ASP.NET2.0

网站开发

自定义控件开发之----自定义视图状态

   这篇,我将谈谈自己在开发自定义控件中的一些方法。

 

   现在.net集成性太强,好多东西都不用自己去写,这让C++的相当羡慕,哈哈,所以那些麻烦的事(自定义控件)程序员都不去自己做,但是会底层的原理还是比较有好处的。

 

   如果一个控件中有非常多的属性的话,你会选择全写在一个类中吗?

 

  一般的人都会说不,因为这样的代码一看就晕,不好管理.如果能够按控件的特性来分开写的话,应该会好很多,这样在程序员调用的时候也好设置相关的属性.

 

    前几篇文章我一直在做自定义分页控件.我们知道自定义分页控件如果做完善的话特别麻烦,理所当然的相应的属性也就特别多.所在根据我自己的实际情况,我把自己的分页控件分为三个类:

 

    分页控件中部分类图结构:

 

  

 

  1: CustomPagerSetting 分页控件相关设置

  2 :CustomPagerText 分页控件相关文本设置

  3:CustomInfoSectionSetting 分页控件自定义信息区设置

 

     如此多的属性如果是放在一个类中那是相当麻烦的.为此我们可以将它们分开形成内嵌属性.

 

Code

     
     如何形成内嵌属性我现在不想多说,此时的控件属性如果是在代码中动态设置的话,如果页面没有回发事件,都是正常的,

但是如果有回发所有的属性都要重新赋值,否则所有的属性值都会丢失.

 

     我们知道viewstate是不能保存复杂属性,就像上面的三个类,它只能保存简单属性,例如int,string等.

 

     刚开始的时候我在CustomPagerSetting为中修改,将里面的属性都用viewstate保存,但是编译通不过,提示不存在viewstate对象,但是在控件文件中是可以的,那是因为控件自己继承control类,类文件又不能继承control,所以我们需要自定义一个ViewState属性
 
Code

 

    自定义类型状态管理,那么我们就必须接触到IStateManager这个接口实现这个接口要实现三个方法:


Code

 

    这些MSN上都可查.这还不行,还要在控件类中实现自定义视图管理.


Code

    

    此时我们再试的时候,发现回发的时候,属性就不会丢失了。


Tag标签: C#,.NET

posted on 2008-04-17 17:30 姜敏 阅读(1985) 评论(21)  编辑 收藏 所属分类: 控件开发

Feedback

#1楼  2008-04-17 17:57 xingliu_sr [未注册用户]

  顶一下,不错啊,学习着.以后俺也来开发自己的控件.   回复  引用    

#2楼 [楼主] 2008-04-17 18:03 姜敏      

@xingliu_sr
谢谢你的支持,我们要温故而知新啊.   回复  引用  查看    

#3楼  2008-04-17 21:07 王庆      

没有必要自定义试图状态吧,你写的一些代码和Control类中的几乎一样,只需要重写Control类的LoadViewState和SaveViewState方法即可。   回复  引用  查看    

#4楼 [楼主] 2008-04-17 22:06 姜敏      

王庆
没有必要自定义试图状态吧,你写的一些代码和Control类中的几乎一样,只需要重写Control类的LoadViewState和SaveViewState方法即可。

本人并不同意你的看法,其它的类是不能保存视图,如果只是在control类中当然可以,当类不能继承control类的时候,就不可以了。你可以自己试下啊。   回复  引用  查看    

#5楼  2008-04-17 22:59 whwqs [未注册用户]

学习   回复  引用    

#6楼  2008-04-18 01:47 镜涛      

呵呵,最近刚写了个自定义分页控件,借鉴一下!   回复  引用  查看    

#7楼  2008-04-18 08:31 李战      

强烈支持!路过   回复  引用  查看    

#8楼 [楼主] 2008-04-18 08:54 姜敏      

@镜涛
@李战
谢谢支持,继续努力   回复  引用  查看    

#9楼  2008-04-18 09:52 小瑞克      

自定义复杂的状态十分麻烦   回复  引用  查看    

#10楼 [楼主] 2008-04-18 10:00 姜敏      

#9楼 2008-04-18 09:52 小瑞克
自定义复杂的状态十分麻烦

哈哈,这是没办法的,知道怎么实现就行,还好这些代码微软都有示例,不用全部由自己实现   回复  引用  查看    

#11楼  2008-04-18 10:49 tiray      

关于自定义ViewState的那部分相当不错!   回复  引用  查看    

#12楼  2008-04-18 12:46 王庆      

--引用--------------------------------------------------
姜敏: 王庆
没有必要自定义试图状态吧,你写的一些代码和Control类中的几乎一样,只需要重写Control类的LoadViewState和SaveViewState方法即可。

本人并不同意你的看法,其它的类是不能保存视图,如果只是在control类中当然可以,当类不能继承control类的时候,就不可以了。你可以自己试下啊。
--------------------------------------------------------
呵呵,我的意思是,你在写分页控件的时候,直接从Control或WebControl继承,这两个类都对ViewState有相关的操作,你没有必要在重写一些类来管理ViewState。   回复  引用  查看    

#13楼 [楼主] 2008-04-18 13:22 姜敏      

@王庆
呵呵,我的意思是,你在写分页控件的时候,直接从Control或WebControl继承,这两个类都对ViewState有相关的操作,你没有必要在重写一些类来管理ViewState

你好像没有清楚我写这篇文章的意思,

如果一个控件中有非常多的属性的话,你会选择全写在一个类中吗?
一般的人都会说不,因为这样的代码一看就晕,不好管理.如果能够按控件的特性来分开写的话,应该会好很多,这样在程序员调用的时候也好设置相关的属性.

分页控件本身的确是具备VIEWSTATE方法,但是你控件中有其它的类,它并不能继承control,此时就要自己写了。一个自定义控件中并不会只有一个类文件。而且默认viewstate是不能保存实例类的

  回复  引用  查看    

#14楼  2008-04-18 16:43 great wang      

强烈支持!支持LZ继续完善自定义分页控件的功能!学习了

  回复  引用  查看    

#15楼  2008-04-18 16:47 great wang      

LZ,什么时候能把你写的分页控件的完整代码打包 让我们分享学习一下!   回复  引用  查看    

#16楼 [楼主] 2008-04-18 16:49 姜敏      

@ great wang
这是4-16更新的源码,有什么问题可留言讨论
http://www.cnblogs.com/ASPNET2008/archive/2008/03/29/1128917.html   回复  引用  查看    

#17楼  2008-04-18 22:13 拼命郎      

其实保证自己的类能够序列化就够了,有这个好习惯不用这么麻烦!   回复  引用  查看    

#18楼  2008-04-22 23:55 huashen      

啥叫:这些MSN上都可查.
  回复  引用  查看    

#19楼  2008-06-14 16:05 王孟军!      

还不错
建议 你把 标题改成 自定义属性类型的 状态维护 更准确,你觉得呢?:)   回复  引用  查看    

#20楼 [楼主] 2008-06-15 22:15 姜敏      

@huashen
啥叫:这些MSN上都可查.
哈哈,不好意思写错了,本意是这些都可以从MSDN上查询。   回复  引用  查看    

#21楼 [楼主] 2008-06-15 22:16 姜敏      

@王孟军!
哈哈,谢谢指教.   回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-09-02 09:55 编辑过


相关链接: