近日在 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,不让它序列化。
public PagerInfo PagerInfo { get { return _pagerInfo } }
重新编译后,问题解决。至于通过为 PagerInfo 类添加序列化功能,我还没试过,我想应该也能解决这个问题。有兴趣的朋友可以试一下。
__________________________________ 2005/01/25 02:45
关于本文提到的 AdvDataList 控件以及 PagerInfo 类,都是在 WebPager 翻页控件里用到的。该控件现已提供源码下载。
一套可嵌入或独立使用的翻页控件: WebPager(附源码)