jquery日期不会在后期操作上填充模型对象

时间:2016-08-27 16:12:19

标签: jquery asp.net-mvc

我有这个剃刀观点:

<div class="panel-body">
    <div class="form-group row">
        <div class="col-sm-6">
            @Html.LabelFor(model => model.DrivingLicenceNo, "Licence No", htmlAttributes: new { @class = "control-label" })
            @Html.EditorFor(model => model.DrivingLicenceNo, new { htmlAttributes = new { @class = "form-control" } })
        </div>

        <div class="col-sm-6">
            @Html.LabelFor(model => model.DrivingLicenceExpiryDate, "Expiry Date", htmlAttributes: new { @class = "control-label" })
            @Html.EditorFor(model => model.DrivingLicenceExpiryDate, new { htmlAttributes = new { @class = "form-control" } })
        </div>
    </div>
    <div class="form-group row">
        <div class="col-sm-6">
            @Html.LabelFor(model => model.DrivingLicenceImage, "Licence Image", htmlAttributes: new { @class = "control-label" })
            <input type="file" name="uploadFile" />
        </div>
        <div class="col-sm-6">
            @Html.LabelFor(model => model.DateofBirth, "Date of Birth", htmlAttributes: new { @class = "control-label" })
            @Html.EditorFor(model => model.DateofBirth, new { htmlAttributes = new { @class = "form-control" } })
        </div>
    </div>
</div>

并显示日期,我使用以下脚本:

<script>
$(function() {
  $("#DrivingLicenceExpiryDate").datepicker({
      changeMonth: true,
      changeYear: true,
      dateFormat: 'dd-mmm-yyyy'
  });
  $("#DateofBirth").datepicker({
      changeMonth: true,
      changeYear: true,
      dateFormat: 'dd-mmm-yyyy'
  });

});

然而,如果不使用脚本,我会在post动作方法模型中填充日期,但是当我重新放入脚本时,模型对象中的日期不会被填充。我需要显示下拉菜单,以便用户更容易选择日期

2 个答案:

答案 0 :(得分:1)

我不确定你的dateFormat是否正确。使用您当前指定的格式,它会将"25-088-20162016"之类的日期设置为输入字段。发布表单时,Model binder将无法将其设置为DateTime属性,因为值(或值的格式)看起来不像正确的日期时间值。

试试这种格式。

$(function() {
        $("#DateofBirth").datepicker({
            changeMonth: true,
            changeYear: true,
            dateFormat: 'dd-mm-yy'
        });
 });

或者如果您坚信格式是有效的日期格式(对于某些有效的文化),您可以在服务器中设置文化,以便服务器知道如何处理输入值。

添加2个链接以供参考

  1. globalization Element

  2. How do you globally set the date format in ASP.NET?

答案 1 :(得分:1)

Chrome具有原生日期控件,仅支持yyyy-MM-dd格式的日期。任何其他格式都会导致它在呈现表单时不绑定日期。

假设您使用的是默认模板,则应安装Modernizr,或者应该添加它。然后,做一些像:

if (!Modernizr.inputtypes.date) {
    $('.date').datepicker({
        /* your options */
    });
}

并将date类添加到您的输入中。

如果您想要一致的呈现(每个浏览器都使用您的datepicker插件),请不要使用EditorFor帮助程序,而是使用TextBoxFor帮助程序(以便获得input type="text"控制)。

仅供参考:Can I use: Date and time input types?