Mac上的MVC3日期验证失败
本文关键字:验证 失败 日期 MVC3 上的 Mac | 更新日期: 2023-09-27 18:06:25
短版本:
我用ASP建立了一个简单的网站。NET MVC3,我遇到了一个关于日期字段、jQuery日期选择器、验证和Mac浏览器的特殊问题。简而言之,日期字段在PC上验证正确,但在Mac上失败(我尝试过Safari和Firefox(:Mac浏览器会触发验证,声称日期格式不正确,但事实并非如此。
长版本:
该模型是一个在EF4.1类中定义的"News"对象。我想稍微"扩充"一下这个类,告诉MVC框架属性"PublishOn"是一个日期,所以我添加了以下代码:
[MetadataType(typeof(NewsMetadata))]
public partial class News
{
// ...
}
public class NewsMetadata
{
[DataType(DataType.Date)]
[Display(Name="Publish on")]
public DateTime PublishOn { get; set; }
}
然后,我在Views/Shared/EditorTemplates/
中添加了一个模板,自动将"日期"css类属性添加到文本框中:
@model DateTime
@Html.TextBox("", Model.ToString("dd-MM-yyyy"), new { @class = "date" })
最后,在我的编辑视图中,我加入了一些jQuery的魔力来获得漂亮的日期选择器:
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script>
<link href="@Url.Content("~/Content/themes/base/jquery.ui.all.css")" rel="stylesheet" type="text/css" />
<script type="text/javascript">
$().ready(function () {
$('.date').datepicker({ dateFormat: "dd-mm-yy" });
});
</script>
顺便说一句,关于dateFormat: "dd-mm-yy"
参数的一个注意事项:如果我将其设置为"dd-mm-yyyy",则日期选择器设置的值是错误的,为双年度,即"01-01-20122012"!!!奇怪的
PublishOn属性是这样完成的:
<div class="editor-label">
@Html.LabelFor(model => model.PublishOn)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.PublishOn)
@Html.ValidationMessageFor(model => model.PublishOn)
</div>
它发出这个HTML:
<div class="editor-label">
<label for="PublishOn">Publish on</label>
</div>
<div class="editor-field">
<input class="date" data-val="true" data-val-required="The Publish on field is required." id="PublishOn" name="PublishOn" type="text" value="22-12-2011" />
<span class="field-validation-valid" data-valmsg-for="PublishOn" data-valmsg-replace="true"></span>
</div>
这在我电脑上的IE9上非常有效。但在Mac(包括Firefox和Safari(上,验证生效,并声称日期格式无效!
根据以上评论中的讨论:
禁用客户端验证使用
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script>
<link href="@Url.Content("~/Content/themes/base/jquery.ui.all.css")" rel="stylesheet" type="text/css" />
<script type="text/javascript">
$().ready(function () {
$('.date').datepicker({ constrainInput: false });
});
</script>
[EDIT]并从相应属性中删除[DataType(DataType.Date)]
[/EDIT]
请参阅jQuery参考资料http://jqueryui.com/demos/datepicker/#option-constrainInput