日期格式客户端验证 - MVC

时间:2017-01-06 22:22:33

标签: javascript jquery asp.net-mvc validation date

所以,我是mvc,.net等的新手,我遇到了日期格式的常见问题。我开始在我的模型上使用数据注释

    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    [DataType(DataType.Date)]
    [Display(Name = "Release Date")]
    public DateTime ReleaseDate { get; set; }

我的Create.cshtml看起来像这样:

    <div class="form-group">
        @Html.LabelFor(model => model.ReleaseDate, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.ReleaseDate, new { htmlAttributes = new { @class = "form-control", placeholder="dd/MM/yyyy" } })
            @Html.ValidationMessageFor(model => model.ReleaseDate, "", new { @class = "text-danger" })
        </div>
    </div>

我尝试创建一个对象,当我以dd / MM / yyyy格式输入日期时,我从jquery验证中收到此错误消息:

  

字段发布日期必须是日期。

当我尝试使用格式为MM / dd / yyyy的日期,并单击“创建”按钮时,我从服务器验证器获取了该消息:

  

值'5/28/2013'对于发布日期无效。

因此,无论哪种格式都与其中一个验证器发生冲突。 经过大量研究后,我能使其工作的唯一方法是使用自定义脚本覆盖jquery验证(尝试过我在这里找到的几个)。我最终使用了John Reilly的globalize,它基于jQuery项目的globalizejQuery validation。 遵循说明,一切正常。创建了所有对象,格式之间没有冲突。

我的修改是:

Webconfig:

  <system.web>
<globalization culture="en-GB" uiCulture="en-GB" />

_Layout.cshtml:

<script src="~/Scripts/jquery-1.10.2.js"></script>
<script src="~/Scripts/bootstrap.js"></script>
<script src="~/Scripts/jquery.validate.js"></script>
<script src="~/Scripts/cldr.js"></script>
<script src="~/Scripts/cldr/event.js"></script>
<script src="~/Scripts/cldr/supplemental.js"></script>
<script src="~/Scripts/globalize.js"></script>
<script src="~/Scripts/globalize/number.js"></script>
<script src="~/Scripts/globalize/date.js"></script>

<script src="~/Scripts/jquery.validate.globalize.js"></script>

(如果我继续使用该解决方案,我会将它们包含在一个包中。)

唯一的问题是客户端验证已经消失。不仅仅是日期验证,还包括每个领域的验证。例如,如果我有一个必需的字符串字段并且没有放入任何内容,我就不会得到我曾经得到的关于所需字段的js错误消息。或者,如果我在“日期”字段中输入“asdasdasd”,则不会出现任何js错误。只有在从服务器验证程序单击“创建”后才会出现错误。

那么,有关如何获得客户端验证的任何想法吗?

由于

PS:我对js的了解非常基础。

1 个答案:

答案 0 :(得分:0)

请勿尝试将客户端日期格式与服务器端日期格式同步。如果您想在客户端使用某种格式,那么您可以指示JQuery的datepicker使用该格式。但是不要指望服务器也使用那种确切的格式。

请参阅我的回答here,我会详细解释MVC如何处理日期。