我开发了一个ASP.NET服务器控件,里面需要用到一个可空类型的日期型字段,假如主要代码如下:
 public class GDatePickerExt : WebControl
 {
........
[Editor(typeof(DateTimeEditor), typeof(UITypeEditor))]
public DateTime? Value
        {
            get
            {
               ....
            }            set
            {
                ....
            }
        }
}我的目的是希望开发时选择日期,可以为空,为了简化设计时的输入,在属性框中用DateTimeEditor选择.将该控件拖放到Aspx页面上,就可以在属性窗口选择日期了,假如选择了2010-7-20日,对应的Aspx源代码为:
<GLib:GDatePickerExt ID="GDatePickerExt1" runat="server" Value="2010-07-20"  />关闭ASPX页面,再重新打开,发现控件无法正常显示,意思是"创建控件时出错-GDatePicker1未能对属性“Value”设置“2010-07-20”",软件可以正常运行,为了解决这一问题,我写了一个转换器:
/// <summary>
    /// 可空日期转换器
    /// </summary>
    public class DateConverter : TypeConverter
    {        public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
        {
            if (value is string)
            {
                if (string.IsNullOrEmpty((string)value))
                    return null;
                else
                {
                    DateTime? dt =DateTime.Parse((string)value);
                    return dt;
                }
            }
            return null;
        }         public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
        {
            if ((destinationType == typeof(string)) && (value is DateTime))
                return Tools.GetDateTimeFormat((DateTime)value);
            return base.ConvertTo(context, culture, value, destinationType);
        }    }并应用到该属性上:
[Editor(typeof(DateTimeEditor), typeof(UITypeEditor))]
[TypeConverter(typeof(DateConverter))]
public DateTime? Value
{
get
            {
               ....
            }            set
            {
                ....
            }
        }
}
这时,编译页面时直接报错:
错误 3 无法从其“Value”属性的字符串表示形式“2010-07-25”创建“System.Nullable`1[[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]”类型的对象。 E:\我的文档\开发工程_WEB\系统管理\SysManage\Default4.aspx 22
该如何处理?

解决方案 »

  1.   

    "2010-07-25"不是DateTime类型。所以要转换,DateTime.Parse("2010-07-25");
      

  2.   

    在ASPX页面里面,全部是字符串,而且是自动的,怎么转换?应该是转换器写法或用法不正确.
      

  3.   

    google了几天,连E文网站都看了不少,后来还是自己解决了,其实,和转换器无关了,是IDE的问题(原来也碰到过),把IDE关闭再打开显示就正常了,装饰如下(无须自己写代码):
            [Editor(typeof(DateTimeEditor),typeof(UITypeEditor))]
            [TypeConverter(typeof(NullableConverter))]
            public DateTime? Value
            {
                get;
                set;
            }请大家来接分哦