我有一个字符串属性视图模型,后面的数据注释:
编辑用绳子工作
[DataType(DataType.Date, ErrorMessage="Not Working !!!")]
public String StringBirthDate1 { get; set; }
这是我的看法
@Html.EditorFor(model => model.StringBirthDate1 )
@Html.ValidationMessageFor(model => model.StringBirthDate1)
如果我跑我的应用程序,并把无效的日期,如“---”或1900年2月29日我没有得到任何验证错误!
在我看来,那[数据类型(DataType.Date,的ErrorMessage =“不工作!”),当它连接到字符串属性的工作。 尝试使用:
[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; }
奇迹般有效 :-)
我不喜欢任何我发现这样的解决方案,我坚持可能性戳,直到我想出了一个我不喜欢。 我加利用从这篇文章的正则表达式正则表达式验证: http://answers.oreilly.com/topic/226-how-to-validate-traditional-date-formats-with-regular-expressions/
[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; }
其结果是,如果该字段为空,我得到所需的错误消息,如果有的话是在该领域,但它不是一个有效的日期,我得到的正则表达式的消息。
我想补充一点,似乎很愚蠢的[数据类型]不接受的错误信息。 我想正是这样线程的原作者。 这将是合乎逻辑和直观。