Asp.net mvc 4 MVC 4日期文化问题?
我正在使用MVC4,我想知道Datetime区域性信息中是否有bug 我试图让澳大利亚的日期生效(dd/MM/yyyy),但它一直说日期格式是错误的,即使在将全球化添加到web.config之后也是如此。我认为这是我的代码中的一个错误,但即使你开始一个新项目,它仍然会发生 我启动了一个新的MVC4Web应用程序 将以下内容添加到web.config文件中Asp.net mvc 4 MVC 4日期文化问题?,asp.net-mvc-4,Asp.net Mvc 4,我正在使用MVC4,我想知道Datetime区域性信息中是否有bug 我试图让澳大利亚的日期生效(dd/MM/yyyy),但它一直说日期格式是错误的,即使在将全球化添加到web.config之后也是如此。我认为这是我的代码中的一个错误,但即使你开始一个新项目,它仍然会发生 我启动了一个新的MVC4Web应用程序 将以下内容添加到web.config文件中 <globalization culture="en-AU" uiCulture="en-AU" /> 然后,我将以下内容添加到
<globalization culture="en-AU" uiCulture="en-AU" />
然后,我将以下内容添加到Register.cshtml文件中:
@LabelFor(m=>m.MyDate)
@Html.TextBoxFor(m=>m.MyDate)
运行应用程序,转到“注册”页面,尝试2013年3月26日这样的日期,结果显示格式无效
请提供帮助。尝试将此属性添加到您的
MyDate
属性:
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
虽然在web.config中设置区域性应该可以做到这一点,但这应该强制它使用该格式
更新
好的,上面的答案并不能真正解决这个问题,但是如果您确实想更改日期最初显示的格式,这一点很重要。一个重要的注意事项是DisplayFormat
属性不是由TextBoxFor
helper拾取的,而是由编辑器for
helper拾取的
不管怎么说,现在是真正的解决方案。问题是jQuery验证在解析日期时没有考虑区域性。如果关闭客户端验证,则在知道区域性的服务器上可以很好地解析日期
修复方法是覆盖日期的jQuery验证,并包括一个额外的jQuery全球化插件。您可以找到globalize插件。您还可以使用Nuget软件包管理器轻松下载插件。我刚刚打开包管理器,选择左边的在线选项卡,在搜索中键入“globalize”,这是第一个结果。安装后,我将包括以下两个文件:
globalize.jsglobalize.culture.en-AU.js 您可以使用脚本标记直接包含它们,也可以将它们放在一个捆绑包中,可能和其他jQuery验证文件一起使用 一旦完成这些操作,您将需要添加以下脚本以覆盖日期的jQuery验证:
<script type="text/javascript">
$(function () {
$.validator.methods.date = function (value, element) {
Globalize.culture("en-AU");
// you can alternatively pass the culture to parseDate instead of
// setting the culture above, like so:
// parseDate(value, null, "en-AU")
return this.optional(element) || Globalize.parseDate(value) !== null;
}
});
</script>
$(函数(){
$.validator.methods.date=函数(值,元素){
全球化。文化(“欧洲”);
//您也可以将区域性传递给parseDate,而不是
//在上面设置区域性,如下所示:
//parseDate(值,null,“en-AU”)
返回此.optional(元素)| | Globalize.parseDate(值)!==null;
}
});
就这样,这就应该起作用了。我将此解决方案归功于以下回答:我还想针对您的问题提供更多解释。创建代理函数怎么样
var _date = $.validator.methods.date;
$.validator.methods.date = function (value, element) {
return _date.call(this, Globalize.parseDate(value), element);
};
接受的答案不是最新的我的最终工作解决方案:
$(function () {
$.validator.methods.date = function (value, element) {
return this.optional(element) || moment(value, "DD.MM.YYYY", true).isValid();
}
});
您必须包括以下内容:
@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")
您可以使用以下方式安装momente.js:
Install-Package Moment.js
在下面的土耳其文化中
<globalization
fileencoding="utf-8"
requestencoding="utf-8"
responseencoding="utf-8"
culture="tr-TR"
uiculture="tr-TR"/>
这不起作用。你能试着创建一个新的项目,并遵循以下步骤吗?我想解决这个问题,真是疯了。。我的安装有问题吗?我的机器?我正在使用IIS Express,因为我直接从vs2012运行它。。这可能是个问题吗?这是我的项目的链接,它只是一个全新的项目,上面提到了这些变化。。我会在本地试一试,看看会发生什么。我没有太多的全球化应用程序或改变文化的经验,但这应该是所有必要的。好的,我相信我明白了!事实证明,除非您使用jQuery验证,否则在web.config中设置区域性几乎就是您需要做的全部工作。当我忽略客户端验证时,日期工作得很好,当我包含它时,它抱怨了您所说的格式。修复方法是覆盖日期的jQuery验证,并包括一个额外的jQuery globalize库,该库允许以其他区域性格式解析日期。请查看我答案中的更新以获得完整的解释。无症状故障-你太棒了,非常感谢。成功了。你是一位学者和绅士。再次感谢,非常感谢你的帮助。谢谢你,这是MVC5的作品。太糟糕了,MVC5已经没有“标准化”文件了。。。
Install-Package Moment.js
<globalization
fileencoding="utf-8"
requestencoding="utf-8"
responseencoding="utf-8"
culture="tr-TR"
uiculture="tr-TR"/>