Asp.net mvc 3 自定义错误消息不适用于asp net mvc 3中的日期时间验证

Asp.net mvc 3 自定义错误消息不适用于asp net mvc 3中的日期时间验证,asp.net-mvc-3,validation,Asp.net Mvc 3,Validation,我有一个带有字符串属性和以下数据注释的ViewModel: 编辑以使用字符串 [DataType(DataType.Date, ErrorMessage="Not Working !!!")] public String StringBirthDate1 { get; set; } 这是我的观点 @Html.EditorFor(model => model.StringBirthDate1 ) @Html.ValidationMessageFor(model => model.St

我有一个带有字符串属性和以下数据注释的ViewModel:

编辑以使用字符串

[DataType(DataType.Date, ErrorMessage="Not Working !!!")]
public String StringBirthDate1 { get; set; }
这是我的观点

@Html.EditorFor(model => model.StringBirthDate1 )
@Html.ValidationMessageFor(model => model.StringBirthDate1)

如果我运行我的应用程序并输入一个无效的日期,如“---”或29.02.1900,我不会得到任何验证错误

在我看来,[DataType(DataType.Date,ErrorMessage=“Not Working!!!”)在连接到string属性时起作用。尝试使用:

[DataType(DataType.Date, ErrorMessage="Not Working !!!")]
puplic string StringBirthDate1{get;set;}

public DateTime BirthDate1 
{ 
    get{return DateTime.Parse(StringBirthDate1);} 
    set{StringBirthDate1 = value.ToString();} 
}

好了,我已经放弃使用内置MVC工具进行数据验证了

我做了一个自定义验证属性:

public class ValidDateStringAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        DateTime dtout;
        if (DateTime.TryParse(value.ToString(), out dtout ))
        {
            return true;
        }
        return false;
    }
}
以下是使用自定义属性装饰的视图模型:

[ValidDateString(ErrorMessage="Invalid date format")]
public String BirthDate1 { get; set; }

工作起来很有魅力:-)

我不喜欢我找到的任何解决方案,所以我一直在探索各种可能性,直到找到一种我喜欢的解决方案。我使用本文中的正则表达式添加了正则表达式验证器:

[必需(ErrorMessage=“需要生日。[MM/DD/YYYY]”)
[1-9]| 0[1-9]| 1[0-2])[-/.]([1-9]| 0[1-9]| 1[0-9]| 2[0-9]| 3[0-1])[-/.](1[9][0-9][2[0-9][0-9][0-9][0-9])$”,ErrorMessage Birthdate=“生日必须以MM/DD yyyyyy格式。”)
公共可为空的生日{get;set;}
结果是,如果字段为空,我将获得所需的错误消息,如果字段中有任何内容,但它不是有效日期,我将获得正则表达式消息


我可以补充一点,[DataType]不接受错误消息似乎很愚蠢。我试着和这篇文章的原作者一模一样。这是合乎逻辑和直觉的

我已经按照你说的做了尝试,但没有更好的结果。。。抱歉。你是对的,我已将其更改为字符串,但它不再验证我的日期。感谢你的回答,即使它没有解决我的问题,但它让我走上了正确的道路:-)这是一种有趣的验证方法,但它不会阻止你获得非托管异常,例如2月31日Good call Arno。对于2/31的条目,错误消息变为“字段必须是日期”。我将在本周了解如何更新正则表达式以更正此问题。
    [Required(ErrorMessage = "Birthdate is required. [MM/DD/YYYY]")]
    [RegularExpression(@"^([1-9]|0[1-9]|1[0-2])[- / .]([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])[- / .](1[9][0-9][0-9]|2[0][0-9][0-9])$", ErrorMessage = "Birthdate must be in MM/DD/YYYY format.")]
    public Nullable<DateTime> Birthdate { get; set; }