ASP .NET MVC DateTime全球化。 "字段日期必须是日期。"

时间:2015-07-08 08:58:26

标签: jquery asp.net-mvc localization date-format globalization

我制作了一个简单的mvc应用来测试全球化/本地化。 我已经创建了Resources.resx文件和Resources.es.resx(西班牙语)文件,其中包含我想要翻译的字符串。

所有字符串都可以正常翻译,但使用DateTime格式 我遇到了困难。

在我使用的局部视图中,我使用xd-soft datetimepicker作为我的日期字段,如下所示:

razor语法:

<div class="form-group">
        @Html.LabelFor(model => model.Date, htmlAttributes: new { @class = "control-label col-md-3" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Date, Resources.FormatSave, new { htmlAttributes = new { @class = "form-control input-sm datetimepicker1" } })
            @Html.ValidationMessageFor(model => model.Date, "", new { @class = "text-danger" })
        </div>
    </div>

并且datetimepicker的脚本如下所示:

<script type="text/javascript">

    jQuery('.datetimepicker1').datetimepicker({
        format: '@Resources.Format', //when local d.m.Y, when spanish d/m/Y
        theme: 'dark',
        lang: '@Resources.Language',
        closeOnDateSelect: true,
    });

</script>

当我使用西班牙语格式d / m / Y时,它正常,当我使用d.m.Y时,我会收到验证消息&#34;字段日期必须是日期。&#34;。

我的模型看起来像这样:

[Display(Name = "Date", ResourceType = typeof(Resources.Resources))]
[Required(ErrorMessageResourceType = typeof(Resources.Resources),
          ErrorMessageResourceName = "DateRequired")]
[DataType(DataType.DateTime)]
public DateTime Date { get; set; }

1 个答案:

答案 0 :(得分:1)

试试吧。当我的dd / MM / yyyy格式未被识别为日期格式时,我找到了这个解决方案。

首先创建一个名为jquery.validate.date.js的新java脚本文件,其中包含以下代码

$(function () {
    $.validator.methods.date = function (value, element) {
        if ($.browser.webkit) {
            var d = new Date();
            return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));
        }
        else {
            return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
        }
    };
});

它会覆盖jquery.validate.js

中的日期验证功能

然后在jquery.validate.js之后调用脚本

<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.val.js")"/>

<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.val.date.js")"/>