ASP.Net动态数据 - 数据类型验证

时间:2010-03-02 16:09:52

标签: asp.net validation dynamic-data

动态数据问题:

我的模型上有2个Nullable<DateTime>类型的字段

当我使用插入表单并输入垃圾字符串时,例如“sdfsdfas”的日期,它给了我一个丑陋的错误信息

无法将输入字符串'rtgh'转换为'System.Nullable`1 [[System.DateTime,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]'。

因此,我创建了一个MetaData类,以尝试获得更友好的错误

[MetadataType(typeof(RuleMetadata))]
    public partial class Rule
    {
        public class RuleMetadata
        {


            [ScaffoldColumn(false)]
            public Guid RuleId;

            // tried this overload
            [DataType("Some error")]
            public Nullable<DateTime> ValidFrom;

            // tried this overload
            [DataType(DataType.Date)]
            public Nullable<DateTime> ValidTo;
        }
    }

但它完全被忽略了,我得到了以前的丑陋错误

我做错了什么?

1 个答案:

答案 0 :(得分:1)

最终通过创建CustomAttribute

来完成此操作

对于一个可以为你辩护的框架来说似乎有点过分

 [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
    sealed class DateFormatAttribute : ValidationAttribute
    {
        public override bool IsValid(object value)
        {
            DateTime dt;
            return DateTime.TryParse(value.ToString(), out dt);
        }
    }

然后将该属性应用于我的MetaData类

[DateFormat(ErrorMessage = "Valid From must be a valid date format")]
            public DateTime? ValidFrom;