我正在使用asp.net mvc-4 Web应用程序,我正在使用jQuery 1.11.2。我有一个DateTime类型的字段,我在其中定义了一个jQuery日期选择器来填充其值如下: -
@Html.DisplayNameFor(model => model.LiveDate) </span>
@Html.TextBoxFor(model => model.LiveDate, new { @class = "datepicker", @Value = (Model != null && Model.LiveDate.HasValue) ? Model.LiveDate.Value.ToString("dd/MM/yyyy") : string.Empty })<span class="requiredicon"> *</span>
@Html.ValidationMessageFor(model => model.LiveDate)
$(".datepicker").datepicker({
dateFormat: "dd/mm/yy",
showOn: "both"
});
这是日期字段的标记: -
<input Value="24/05/2016" class="datepicker" data-val="true" data-val-date="The field Live Date must be a date." id="LiveDate" name="LiveDate" type="text" value="24/05/2016 00:00:00" /><span class="requiredicon">
现在当我尝试从jQuery日期选择器(例如17/05/2016
)中选择日期时,我将仅在Safari&amp;上发现以下错误The field Live Date must be a date.
Chrome网络浏览器,在IE和Firefox上运行良好。如果我选择01/05/2016
之类的日期,它将适用于所有浏览器,,,那么有人可以就此提出建议吗?
现在我读了很多关于这个问题的内容,但找不到任何适用于我的方法。
这里提到的解决方案1 linke,是使用以下脚本: -
$(function() {
$.validator.methods.date = function (value, element) {
if ($.browser.webkit) {
//ES - Chrome does not use the locale when new Date objects instantiated:
var d = new Date();
return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));
}
else {
return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
}
};
});
但是当我在我的视图中的脚本部分内添加此脚本时,我注意到非日期字段的客户端验证也已被禁用,这是我不想要的。例如,如果我将所需的int字段留空,页面将在显示验证错误之前重新加载。当我添加上面的脚本时会发生这种情况,所以上面的脚本似乎也会影响非日期字段客户端验证。
解决方案2 。是在我的视图中使用它,删除data-val-date,
$("input[data-val-date]").removeAttr("data-val-date");
现在我在我的视图结尾添加了这个,但它没有禁用我的日期字段的客户端验证。
所以有人可以这样做吗?
答案 0 :(得分:0)
这对我有用:
$.validator.addMethod('date',
function (value, element) {
return true; // since MVC4 data-val-date is put on EVERY vm date property. Default implementation does not allow for multiple cultures...
});
将它放在脚本部分。
来自this thread(虽然这不是公认的答案)。