在Mvc中验证DateFormat

Abh*_*hek 14 asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我在MVC中有一个属性ExpiredDate定义

[Required]
        [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
        public DateTime? ExpirationDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

我想验证页面上的日期格式是否正确.我使用的日期格式是MM/dd/yyyy.

tru*_*dia 25

您应该使用该DataType属性DataType.Date.这两个都在System.ComponentModel.DataAnnotations命名空间中,可以像这样使用:

[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime? ExpirationDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

这个答案还包括一些更多的属性.

更新:要在ASP.NET MVC4中启用客户端验证,您需要执行以下操作:

  1. 将jquery.validation插件添加到页脚

    <%: Scripts.Render("~/Scripts/jquery.validate.min.js") %>
    <%: Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js") %>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将其添加到web.config

    <appSettings>
      <add key="ClientValidationEnabled" value="true" />
      <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    </appSettings>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在使用时使用此css,@Html.ValidationMessageFor()以便最初隐藏它并通过javascript验证显示

    /* styles for validation helpers */
    .field-validation-error {
        color: #e80c20;
        font-weight: bold;
    }
    
    .field-validation-valid {
        display: none;
    }
    
    input.input-validation-error {
        border: 1px solid #e80c20;
    }
    
    input[type="checkbox"].input-validation-error {
        border: 0 none;
    }
    
    .validation-summary-errors {
        color: #e80c20;
        font-weight: bold;
        font-size: 1.1em;
    }
    
    .validation-summary-valid {
        display: none;
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • 谢谢先生,但是使用[RegularExpression(@"^(([0-2]\d | [3] [0-1])\.([0]\d | [1] [0-2]) .[2] [0]\d {2})$",ErrorMessage ="结束日期应该是MM/dd/yyyy格式")]它对我有用 (2认同)

luk*_*yer 9

必须手动解决自定义验证日期格式.

由于jquery.validate.unobtrusive.min.js中的MVC错误(即使在MVC 5中),它不会以任何方式接受日期/日期时间格式,因此可能会发生客户端验证问题.它不是由datepicker或浏览器引起的.不幸的是你必须手动解决它.

我最终的解决方案:

你必须包括:

@Scripts.Render("~/Scripts/jquery-3.1.1.js")
@Scripts.Render("~/Scripts/jquery.validate.min.js")
@Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js")
@Scripts.Render("~/Scripts/moment.js")
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令安装moment.js:

Install-Package Moment.js
Run Code Online (Sandbox Code Playgroud)

然后你最终可以为日期格式解析器添加修复:

$(function () {
    $.validator.methods.date = function (value, element) {
        return this.optional(element) || moment(value, "DD.MM.YYYY", true).isValid();
    }
});
Run Code Online (Sandbox Code Playgroud)