Kriss Liu

击长空、博千里,笑慑鬼魅,坦荡万象。四海皆是可有作为,宇内必有余之归宿。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  日在 ASP.NET 2.0 中使用以前用 .NET 1.1 开发的一个WebControls动态库,其中有两个控件分别是继承自 DataGrid 和 DataList,发现出现如下的创建错误:
  

  这个控件在ASP.NET 1.1里都是正常的。如果不去管这个错误,也是可以照常使用,在运行的时候也一切正常。
  从问题的描述来看,"make sure all properties are valid.",好像是说控件的属性有问题。把代码仔细地检查了一遍,还是没发现什么错误。难道是ASP.NET 2.0中针对WebControl的某些变化导致了这个创建错误?但运行时并没有错啊。。

  这个时候无意中选择了SmartTag中的"AutoFormat"功能,却意外的发现另一个错误提示:
  
  "Cannot create an object of type 'Hooyee.Utils.PagerInfo'" from its string representation '' for the 'PagerInfo' property. "
  是说无法通过 PagerInfo 属性的空字符串值创建 PagerInfo 对象。原来就是这个Property有错误。

  PagerInfo是一个用于保存和计算分页信息的类。由于我的DataList支持分页功能,所以添加了这样一个属性。
  从我的理解来看,系统可能想把PagerInfo属性d的内容以文本形式保存在html里,然后又通过这个字符串值来反序列化或者重新创建一个PagerInfo实例。而我的PagerInfo类并未实现序列化或重载ToString()方法,所以也就无法把它的值保存成string类型。

  因为PagerInfo这个属性本身就没有必要保存在html里,所以我的解决方法是在这个属性前面加一个DesignerSerializationVisibilityAttribute,这个特性用于控制某个属性在设计时怎样进行序列化。我这里是Hidden,不让它序列化。

[DesignerSerializationVisibility( DesignerSerializationVisibility.Hidden )] 
public PagerInfo PagerInfo get return _pagerInfo } } 


  重新编译后,问题解决。至于通过为 PagerInfo 类添加序列化功能,我还没试过,我想应该也能解决这个问题。有兴趣的朋友可以试一下。

  __________________________________ 2005/01/25 02:45
  关于本文提到的 AdvDataList 控件以及 PagerInfo 类,都是在 WebPager 翻页控件里用到的。该控件现已提供源码下载。
  一套可嵌入或独立使用的翻页控件: WebPager(附源码)
  

posted on 2005-01-24 22:38  Kriss Liu  阅读(868)  评论(4编辑  收藏  举报