日期格式客户端验证 - MVC
Posted
技术标签:
【中文标题】日期格式客户端验证 - MVC【英文标题】:Date Format Client Validation - 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 项目的 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知识比较基础。
【问题讨论】:
【参考方案1】:不要尝试将客户端日期格式与服务器端日期格式同步。如果您想在客户端使用某种格式,那么您可以指示 JQuery 的 datepicker 使用该格式。但不要指望服务器也会使用这种确切的格式。
请看我的回答 here 我详细解释了 MVC 如何处理日期。
【讨论】:
感谢您的回复。我得到了你在另一篇文章中使用的关于不同国家的例子,但我不明白这如何适用于我的案例。现在客户端/服务器格式已同步。服务器请求 dd/MM/yyyy,客户端也请求 dd/MM/yyyy。我的问题是现在客户端没有像以前那样给出任何错误消息了。 我的全部观点是,您的问题源于您尝试同步它们,这不是一个好的解决方案。如果您删除所有为同步而编写的 JQuery 代码,那么您的问题将不再存在。整个想法不是同步它们。 是的,但这不是我需要的。我需要它们都使用本地格式。以上是关于日期格式客户端验证 - MVC的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC2 自定义 jQuery 验证:客户端