我在MVC中有一个属性ExpiredDate定义
[Required]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime? ExpirationDate { get; set; }
我想验证页面上的日期格式是否正确。
我使用的日期格式为 MM/dd/yyyy
。
答案 0 :(得分:24)
您应该将DataType
属性与DataType.Date
一起使用。这两个都在System.ComponentModel.DataAnnotations
命名空间中,可以像这样使用:
[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime? ExpirationDate { get; set; }
This answer还包含更多属性。
更新:要在ASP.NET MVC4中启用客户端验证,您需要执行以下操作:
将jquery.validation插件添加到页脚
<%: Scripts.Render("~/Scripts/jquery.validate.min.js") %>
<%: Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js") %>
将此添加到web.config
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
使用@Html.ValidationMessageFor()
时使用此css,以便最初隐藏并通过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;
}
答案 1 :(得分:8)
必须手动解决自定义验证日期格式。
由于 jquery.validate.unobtrusive.min.js 中的MVC错误(即使在MVC 5中),不以任何方式接受日期/日期时间格式,因此可能会发生客户端验证问题< / strong>即可。它不是由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")
您可以使用以下方式安装moment.js:
Install-Package Moment.js
然后你最终可以为日期格式解析器添加修复程序:
$(function () {
$.validator.methods.date = function (value, element) {
return this.optional(element) || moment(value, "DD.MM.YYYY", true).isValid();
}
});
答案 2 :(得分:-4)
您可以使用以下验证:
[Required]
[DisplayFormat(DataFormatString = "{0:d}")]
public DateTime? ExpirationDate { get; set; }
我认为它会起作用