Asp.net mvc 为什么在使用jQueryUIDatePicker时会出现验证错误?

Asp.net mvc 为什么在使用jQueryUIDatePicker时会出现验证错误?,asp.net-mvc,jquery-ui,datepicker,Asp.net Mvc,Jquery Ui,Datepicker,我有一个由以下代码呈现的输入元素: @Html.TextBoxFor(model => model.DateOfBirth, "{0:dd/MM/yyyy}", new { @class = "datepicker" }) @Html.ValidationMessageFor(model => model.DateOfBirth, "", new { @class = "text-danger" }) DateOfBirth属性的类型为DateTime?。然后,我有代码让类为dat

我有一个由以下代码呈现的输入元素:

@Html.TextBoxFor(model => model.DateOfBirth, "{0:dd/MM/yyyy}", new { @class = "datepicker" })
@Html.ValidationMessageFor(model => model.DateOfBirth, "", new { @class = "text-danger" })
DateOfBirth属性的类型为DateTime?。然后,我有代码让类为datepicker的元素充当日期选择器:

<script>
    $(function () {
        $(".datepicker").datepicker({
            dateFormat: "dd/mm/yy",
            changeYear: true,
            showOn: "button"
        }).next("button").button({
            icons: { primary: 'ui-icon-calendar' },
            label: "Select a date",
            text: false
        });
    });
</script>
当我导航到我的视图时,我会看到默认日期和日期选择器图标,当我单击该图标时,我会看到日历下拉列表。但是,当我选择一个日期时,通常是第一次,我会得到一个验证错误,说明:

字段DateOfBirth必须是日期


然后,当我选择另一个日期时,错误消失了,只是在随后的日期选择中返回“随机”。我无法缩小哪些日期会导致错误,哪些不会;即使我把月和日都控制在13以下,以避免“dd”和“mm”之间的潜在问题;。是什么导致了这些恼人的验证错误?

您可以直接在模型中给出日期时间格式。我更改了你的代码,它对我很好

<script type="text/javascript">

$(document).ready(function () {


    $('.dtPicker').datepicker({
        dateFormat: "dd-mm-yy",
        changeYear: true,
        showOn: "button"
    }).next("button").button({
        icons: { primary: 'ui-icon-calendar' },
        label: "Select a date",
        text: false
    });


});

不确定这是否是原因,但您在razordd/MM/yyyy和javascript dd/MM/yy中定义了不同的日期格式。@JenishRabadiya一个是.NET日期格式,另一个是JQuery UI格式。这些总是不同的。据我所知,我选择的任何日期都与这两种格式相匹配。你可能会从DateTime中得到一个日期,类似于jQueryUI没有自己的类,它使用原生js日期。dateFormat选项只是为了方便使用字符串。您使用的浏览器是什么?我使用的是Chrome,即使按照您的建议格式化模型上的字段,我仍然会得到验证错误。我还希望避免在模型中格式化日期,因为这依赖于每个具有该属性的日期属性。我想最终用一个编辑器模板覆盖所有日期属性。@ProfK Iam也使用chrome。您是否在脚本中更改了此日期格式:dd-mm-yy?@ProfK这对我也适用。你应该尊重那个自由调试你的代码、记录你的打字错误并将其标记为答案的人@我真的很感激没有人告诉我该做什么,谢谢。我对那个贴出答案的人深表敬意,但这对我来说并不管用。接受它不仅会减少我得到其他答案的机会,而且会对其他有同样问题的用户造成伤害,而这个答案对他们也不起作用。
@using(Html.BeginForm("",""))
{

<fieldset>
<div>
@Html.LabelFor(model=>model.Name)
@Html.TextBoxFor(model=>model.Name)
</div>
<div>
@Html.LabelFor(model=>model.DoB)
@Html.TextBoxFor(model=>model.DoB,new {@class="dtPicker"})
</div>

<input type="submit" value="submit" />
</fieldset>
}



 public class DatePick
{
    [DisplayName("UserName")]
    public string Name { get; set; }

    [DisplayName("DateOfBirth")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime? DoB { get; set; }
}