16

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

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

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

4

3 回答 3

26

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

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

这个答案还包括更多属性。

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

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

    <%: Scripts.Render("~/Scripts/jquery.validate.min.js") %>
    <%: Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js") %>
    
  2. 将此添加到 web.config

    <appSettings>
      <add key="ClientValidationEnabled" value="true" />
      <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    </appSettings>
    
  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;
    }
    
于 2013-05-15T13:55:37.780 回答
13

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

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

我最终的工作解决方案:

您必须在之前包括:

@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")

您可以使用以下方法安装 moment.js:

Install-Package Moment.js

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

$(function () {
    $.validator.methods.date = function (value, element) {
        return this.optional(element) || moment(value, "DD.MM.YYYY", true).isValid();
    }
});
于 2017-03-08T16:06:30.003 回答
-5

您可以使用以下验证:

[Required]
        [DisplayFormat(DataFormatString = "{0:d}")]
        public DateTime? ExpirationDate { get; set; }

我认为它会起作用

于 2013-05-15T13:27:21.130 回答