该字段必须是日期 – Chrome中的DatePickervalidation失败 – mvc

我有奇怪的问题。 我的日期validation在Chrome中不起作用。 我试过这个答案,但它对我不起作用。

我的模型中有这个:

[Display(Name = "Date")] [DataType(DataType.Date)] public DateTime Date { get; set; } 

我的看法:

 
@Html.TextBoxFor(model => model.Item.Date, new { @class = "picker" }) @Html.ValidationMessageFor(model => model.Item.Date)
$(document).ready(function () { $('.picker').datepicker({ dateFormat: 'dd.mm.yy', changeMonth: true, changeYear: true, selectOtherMonths: true }); });

一切都适用于Opera和Firefox,但Chrome不喜欢这种类型的日期。 我经常收到以下错误The field 'Date' must be a date

有任何想法吗?

UPDATE

当代码在局部视图中时,似乎存在问题。 当我将该代码复制到主页时,validation工作正常。

我正在我的主视图中插入局部视图,就像这样:

 @Html.Partial("_CreateOrEdit", Model) 

上面的代码在局部视图中:

 @model Pro.Web.Models.Model 
@Html.TextBoxFor(model => model.Item.Date, new { @class = "picker" }) @Html.ValidationMessageFor(model => model.Item.Date)

 $(document).ready(function () { $('.picker').datepicker({ dateFormat: 'dd.mm.yy', changeMonth: true, changeYear: true, selectOtherMonths: true });  }); 

UPDATE2

毕竟它不起作用。 有时它有效,有时不行。 我在日期上点击了几次,有时甚至是validation通过。 在同一天,可能会有正确的validation。

这是日期字段的输出html:

 

这里的情况完全相同(局部视图)

我通过删除validation属性并在服务器端执行validation来解决它:

 $('#date').removeAttr("data-val-date"); 

在我看来,问题是MVC使用[type=date]生成日期HTML5输入。 这导致chrome有效日期格式与系统日期格式相同。

您可以使用以下属性在MVC中将日期格式设置为与JqueryUI相同:

 [DataType(DataType.Date), DisplayFormat( DataFormatString="{0:dd.MM.yy}", ApplyFormatInEditMode=true )] 

第二个想法是使用文章中的代码: 使用回退到jQuery UI创建本机HTML 5 Datepicker

还有一件事。 在html输入中有一个关于日期的好主题: 有没有办法改变输入类型=“日期”格式?

我通过删除validation属性解决了它

 @model Pro.Web.Models.Model 
@{ Html.EnableClientValidation(false); } @Html.TextBoxFor(model => model.Item.Date, new { @class = "picker" }) @Html.ValidationMessageFor(model => model.Item.Date) @{ Html.EnableClientValidation(true); }

一年之后崩溃到派对有点迟了,但我已经尝试了我能找到的关于这个错误的所有解决方案,而且没有一个帮助。 对于像我这样在这里挣扎的人来说,解决这个问题是什么。

添加到jquery.validate.globalize.js及其缩小版本(取决于您使用的是)这一小段代码的末尾。

 ... $.validator.methods.range = function (value, element, param) { var val = Globalize.parseFloat(value); return originalMethods.range.call(this, val, element, param); }; }(jQuery, Globalize)); 

Globalize.culture("en-GB");

当然,在引号内使用您自己的文化设置。

希望能帮助到你!

问题似乎是 (HTML5),因为规范说有效值被定义为RFC3339 。

所以我将我的视图更改为:

  
@Html.LabelFor(model => model.ValidFrom)
@Html.HiddenFor(model => model.ValidFrom) @Html.ValidationMessageFor(model => model.ValidFrom)

希望能帮助到你。

我有同样的错误。 通过应用datetime作为类型来解决它,

  @Html.EditorFor(model => model.LineResetAllowStartDate, new { htmlAttributes = new { @class = "form-control" , @type = "datetime" } }) 

同样只使用时间

  @Html.EditorFor(model => model.LineResetAllowStartDate, new { htmlAttributes = new { @class = "form-control" , @type = "time" } })