Modelstate始终抛出无效的日期时间错误

时间:2013-04-05 16:16:53

标签: jquery asp.net-mvc asp.net-mvc-4

我对Asp.net MVC4中的日期验证有疑问。 我正在使用数据注释进行日期验证,如下所示

   [DataType(DataType.Date)]
   [AllowHtml]
   [DisplayFormat(HtmlEncode = false, ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]      
   [Display(Name = "Date Of Birth")]
   public Nullable<System.DateTime> DateOfBirth { get; set; }

接下来,在Html页面中,我在MVC Html表单中使用了以下内容

@Html.TextBoxFor(model => model.UserSettings.DateOfBirth, 
                          String.Format("{0:dd/MM/yyyy}",
                          model.UserSettings.DateOfBirth), 
                       new { id = "DoB", @class = "brth-ipt" })

最后,我正在使用Jquery Date选择器,如下所示

$(function () {
    $("#DoB").datepicker("destroy");
    $("#DoB").datepicker({
        showOn: "both",
        beforeShow: customRange,
        dateFormat: "dd/mm/yy",  //"mm-dd-yy",
        firstDay: 1,
        changeFirstDay: false,
        changeMonth: true,
        changeYear: true,
        yearRange: "-150:+0"
    });
});

我的问题是,当我从datepicker中选择一个日期时,它会显示为mm / dd / yyyy格式,并且工作正常。

但是当我再次加载页面来编辑表单时,它以mm-dd-yyyy格式显示。现在,当我保存表单而没有查找上一个日期(mm-dd-yyyy格式)时,我无法保存表单,因为数据注释vaidation会给我一个错误。 “日期不是有效格式”。

我无法解决这个问题。

3 个答案:

答案 0 :(得分:0)

试试这个:

    [DataType(DataType.Date)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
    [Display(Name = "Date Of Birth:")]
    public DateTime? DateOfBirth { get; set; }

据我所知,你甚至不需要使用Jquery Date picker。该框架附带内置帮助程序来选择日期。

在您的视图中

    <div class="editor-label">
        @Html.LabelFor(model => model.DateOfBirth )
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.DateOfBirth )
        @Html.ValidationMessageFor(model => model.DateOfBirth )
    </div>

这是在Google Chrome中测试的

答案 1 :(得分:0)

Html.TextBoxFox()未考虑[DisplayFormat]。要利用此属性并实现目标,您可以使用

Html.EditorFor(x => x.UserSettings.DateOfBirth, new {id = "DoB", @class = "brth-ipt"})

答案 2 :(得分:0)

我碰到同样的事情,终于找到了解决问题的方法。 我在ViewModel中做了这个数据注释

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]

,此代码在我的日期选择器

<div class="input-group date" id="mydatepicker" data-date-format="MM-dd-yyyy">
   <input asp-for="MyDate" type="text" class="form-control" />
   <span class="input-group-addon">
      <i class="glyphicon glyphicon-calendar"></i>
   </span>
</div>

然后我将这段代码放在jquery中以通过ajax发送

$('#calender-container .input-group.date').datepicker({
   todayBtn: true,
   calendarWeeks: true,
   todayHighlight: true,
   autoclose: true,
}).datepicker('update', new Date());

从“ mm-dd-yyyy”更改数据日期格式时很有趣,
这给了我无效的模型状态,到“ MM-dd-yyyy”,一切都变为有效。