MVC 4日期文化问题?

use*_*329 18 asp.net-mvc-4

我正在使用MVC 4,我想知道Datetime文化信息中是否有错误?

我试图让澳大利亚的约会工作(dd/MM/yyyy),但它一直说日期格式是错误的,即使在puttig全球化到web.config之后.我认为这是我的代码错误,但即使你开始一个新的项目,它仍然会发生.

我开始了一个新的MVC 4 Web应用程序.

将以下内容添加到web.config文件中

<globalization culture="en-AU" uiCulture="en-AU" />
Run Code Online (Sandbox Code Playgroud)

然后我将以下内容添加到AccountModels.cs文件中:

[DataType(DataType.DateTime)]
[Required(ErrorMessage="Date is required")]
public DateTime? MyDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后我将以下内容添加到Register.cshtml文件中:

<li>
    @Html.LabelFor(m => m.MyDate)
    @Html.TextBoxFor(m => m.MyDate)
</li>
Run Code Online (Sandbox Code Playgroud)

运行应用程序,转到注册页面,尝试像26/03/2013这样的日期,它说的不是有效的格式.

请帮忙.

asy*_*ult 24

尝试将此属性添加到您的MyDate媒体资源:

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
Run Code Online (Sandbox Code Playgroud)

虽然在web.config中设置文化应该这样做,但这应该强制它进入那种格式.

UPDATE

好的,所以上面的答案并没有真正解决问题,但是如果你想改变最初显示日期的格式很重要.一个重要的注意事项是帮助DisplayFormat程序不会获取该属性,TextBoxFor但它是由EditorFor帮助程序获取的.

无论如何,真正的解决方案.问题是jQuery验证在解析日期时没有考虑文化.如果关闭客户端验证,则在知道文化的服务器上解析日期就好了.

修复是覆盖日期的jQuery验证,并包含一个额外的jQuery全球化插件.你可以在这里找到globalize插件.您也可以使用Nuget Package Manager轻松下载插件.我刚打开包管理器,选择左侧的在线选项卡,在搜索中输入"globalize",这是第一个结果.安装完成后,我将这两个文件包括在内:

globalize.js
globalize.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>
Run Code Online (Sandbox Code Playgroud)

这就是它,应该做的伎俩.我将这个解决方案归功于这个答案:JQuery Validation和MVC 3.如何更改日期格式 我还想提供一些特定于您的问题的更多解释.