【发布时间】: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 项目的 globalize 和 jQuery 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