我在asp.net mvc中设置验证日期格式Chrome时遇到问题,对于IE等其他浏览器,Firefox工作正常。
我在我的模型中定义了日期,如下一个代码:
[Required]
[Display(Name = "Data fi publicació")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime PublishingEndDate { get; set; }
在我看来:
@Html.TextBoxFor(model => model.PublishingEndDate)
@Html.ValidationMessageFor(model => model.PublishingEndDate)
问题似乎@Html.ValidationMessageFor
使用格式MM/dd/yyyy
验证日期,但我想要的是使用欧洲格式dd/MM/yyyy
进行验证。如何将默认文化验证格式日期更改为dd/MM/yyyy
?
感谢您的帮助
答案 0 :(得分:22)
最后我发现这个问题只影响Chrome,IE,Firexfox运行完美,看起来是一个Chrome bug,我在http://forums.asp.net/t/1729179.aspx/1找到了解决方案
必须使用以下代码覆盖jquery的验证器方法:
$(document).ready(function () {
$('.calendarPicker').datepicker({ dateFormat: "dd/mm/yy" });
$.validator.addMethod('date',
function (value, element, params) {
if (this.optional(element)) {
return true;
}
var ok = true;
try {
$.datepicker.parseDate('dd/mm/yy', value);
}
catch (err) {
ok = false;
}
return ok;
});
});
答案 1 :(得分:1)
确保您已在web.config中设置文化。这将使用所选文化的适当日期和数字格式。
http://msdn.microsoft.com/en-us/library/bz9tc508(v=vs.100).aspx
答案 2 :(得分:1)
这对我有所帮助:
$(function() {
$(".datepicker").datepicker({
todayBtn: true,
language: "en-GB",
format: "dd/mm/yyyy",
clearBtn: true,
pickTime: false
});
$.validator.addMethod("date",
function(value, element) {
return this.optional(element) || parseDate(value, "dd-MM-yyyy") !== null;
});
});
答案 3 :(得分:0)
为避免客户端验证,您不希望任何与输入关联的data-val属性。所以我所做的就是写下纯HTML,而不是使用TextFor或EditorFor等...
<input type="text" class="datepicker form-control">
对我来说很好......
答案 4 :(得分:0)
如果您不想使用日期时间选择器:
由于 jquery.validate.unobtrusive.min.js 中的MVC错误(即使在MVC 5中),不以任何方式接受日期/日期时间格式,因此可能会发生客户端验证问题< / strong>即可。不幸的是你必须手动解决它。
我的最终解决方案:
您必须先包括:
@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();
}
});