我想使用MVC3中的DataAnnotations验证文本框以接受日期时间值。但我不知道该怎么做。以下是我正在努力完成我的要求并且它无法正常工作。
[DataType(DataType.DateTime, ErrorMessage = "Invalid Datetime")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy HH:mm}")]
[Display(Name = "Start Datetime")]
public DateTime? StartDateTime { get; set; }
当我在填写损坏的数据后点击提交按钮时,第一个问题是该表单获取帖子,之后它显示“无效日期”的消息,如果我输入的是没有时间的日期,则仍然会形成获取帖子,但这次是没有显示同样错误的信息。
所以我只想知道如何使用MVC DataAnnotations验证我的文本框以“dd / MM / yyyy HH:mm”格式接受日期时间。
答案 0 :(得分:9)
<强> 1。您的客户端验证无效。您在提交表单后看到错误消息 - 表示客户端验证无法正常工作。为了使客户端验证工作,ASP.NET MVC假定您在页面上引用了jquery.validate.js
和jquery.validate.unobtrusive.js
。您可以在Visual Studio上使用NuGet Package Manager下载它们。
<强> 2。日期字段未经过验证。您希望DisplayFormat
为您验证日期格式。但事实上并非如此。这更多的是关于在视图上显示您的日期。
要验证日期格式,您需要使用自己的自定义Attribute
。或者您只需使用RegularExpression
属性即可。最简单的例子如下:
[RegularExpression(@"\d{1,2}/\d{1,2}/\d{2,4}\s\d{1,2}:\d{1,2}", ErrorMessage = "")]
或者,如果您想创建自定义属性,则:
public class DateFormatValidation : ValidationAttribute{
protected override bool IsValid(object value){
DateTime date;
var format = "0:dd/MM/yyyy HH:mm"
bool parsed = DateTime.TryParseExact((string)value, format, System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None, out date)
if(!parsed)
return false;
return true;
}
}
然后使用它:
[DataType(DataType.DateTime, ErrorMessage = "Invalid Datetime")]
[DateFormatValidation]
[Display(Name = "Start Datetime")]
public DateTime? StartDateTime { get; set; }
答案 1 :(得分:0)
我从diff网站得到它,说它在chrome中有问题,他已经通过应用此代码修复了它。 因此,首先检查它是否在firefox中工作,然后您可能被迫应用此代码,但是此代码会跳过检查日期格式。
$.validator.methods["date"] = function (value, element) { return true; }