使用mvc3中的DataAnnotations验证文本框以仅接受有效的日期时间值

时间:2014-02-12 09:57:56

标签: c# asp.net-mvc-3 data-annotations

我想使用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”格式接受日期时间。

2 个答案:

答案 0 :(得分:9)

<强> 1。您的客户端验证无效。您在提交表单后看到错误消息 - 表示客户端验证无法正常工作。为了使客户端验证工作,ASP.NET MVC假定您在页面上引用了jquery.validate.jsjquery.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; }