【问题标题】:Date Format Client Validation - MVC日期格式客户端验证 - MVC
【发布时间】:2017-05-21 18:48:19
【问题描述】:

所以,我是 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。 按照说明进行操作,一切正常。创建所有对象,格式之间没有冲突。

我的修改是:

网络配置:

  <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知识比较基础。

【问题讨论】:

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


    【解决方案1】:

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

    请看我的回答 here 我详细解释了 MVC 如何处理日期。

    【讨论】:

    • 感谢您的回复。我得到了你在另一篇文章中使用的关于不同国家的例子,但我不明白这如何适用于我的案例。现在客户端/服务器格式已同步。服务器请求 dd/MM/yyyy,客户端也请求 dd/MM/yyyy。我的问题是现在客户端没有像以前那样给出任何错误消息了。
    • 我的全部观点是,您的问题源于您尝试同步它们,这不是一个好的解决方案。如果您删除所有为同步而编写的 JQuery 代码,那么您的问题将不再存在。整个想法不是同步它们。
    • 是的,但这不是我需要的。我需要它们都使用本地格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多