Asp.net MVC 设置验证日期格式在 Chrome 上失败
Posted
技术标签:
【中文标题】Asp.net MVC 设置验证日期格式在 Chrome 上失败【英文标题】:Asp.net MVC set validation date format fails on Chrome 【发布时间】:2012-10-11 18:04:09 【问题描述】:我在 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
?
感谢您的帮助
【问题讨论】:
这里问了一个类似的问题:***.com/questions/5199835/… 【参考方案1】:最后我发现这个问题只影响 Chrome,用 IE,Firexfox 完美运行,似乎是一个 chrome 错误,我在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;
);
);
【讨论】:
我的问题是,如果我在日期选择器中选择了第二个日期,它会给我一个验证错误 - 仅在 Chrome 中(使用 40.0.2214.115)。该解决方案在原始问题发布近三年后修复了它!不错!【参考方案2】:确保您已在 web.config 中设置文化。这将为所选的文化使用适当的日期和数字格式。
http://msdn.microsoft.com/en-us/library/bz9tc508(v=vs.100).aspx
【讨论】:
【参考方案3】:这对我有帮助:
$(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;
);
);
【讨论】:
【参考方案4】:为避免客户端验证,您不希望任何与输入关联的 data-val 属性。所以我所做的是写下纯 HTML,而不是使用 TextFor 或 EditorFor 等...
<input type="text" class="datepicker form-control">
对我来说很好......
【讨论】:
【参考方案5】:如果您不想使用日期时间选择器:
由于 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();
);
【讨论】:
以上是关于Asp.net MVC 设置验证日期格式在 Chrome 上失败的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC 验证器无法识别引导程序 DatePicker 格式