MVC 4日期文化问题?

时间:2013-08-31 13:45:38

标签: 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" />

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

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

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

<li>
    @Html.LabelFor(m => m.MyDate)
    @Html.TextBoxFor(m => m.MyDate)
</li>

运行该应用程序,转到注册页面,尝试日期为26/03/2013的日期,并且它表示格式不正确。

请帮忙。

4 个答案:

答案 0 :(得分:23)

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

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]

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

<强>更新

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

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

修复是覆盖日期的jQuery验证,并包含一个额外的jQuery全球化插件。您可以找到globalize插件here。您也可以使用Nuget Package Manager轻松下载插件。我刚打开包管理器,选择左侧的 Online 选项卡,在搜索中输入“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>

就是这样,那应该可以解决问题。我将此解决方案归功于这个答案:JQuery Validation and MVC 3. How to change date format我还想提供一些针对您的问题的更多解释。

答案 1 :(得分:1)

接受的答案不是最新的。 我的最终解决方案:

$(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")

您可以使用以下方式安装moment.js:

Install-Package Moment.js

答案 2 :(得分:0)

创建代理功能怎么样?

var _date = $.validator.methods.date;

$.validator.methods.date = function (value, element) {
    return _date.call(this, Globalize.parseDate(value), element);
};

答案 3 :(得分:0)

下面的其他土耳其文化。

<globalization 
fileencoding="utf-8" 
requestencoding="utf-8" 
responseencoding="utf-8" 
culture="tr-TR" 
uiculture="tr-TR"/>