Asp.net mvc 3 自定义错误消息不适用于asp net mvc 3中的日期时间验证
我有一个带有字符串属性和以下数据注释的ViewModel: 编辑以使用字符串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
[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; }