我的Nullable DateTime视图失败并显示空

时间:2016-05-03 19:12:03

标签: c# asp.net-mvc datetime

在我的MVC应用中,我有一个共享DateTime.cshtml视图定义如下:

@model DateTime?
@{
    var value = "";
    if (Model.HasValue) 
    {
        value = String.Format("{0:d}", Model.Value);
    }
}
@Html.TextBox("", value, new { @class = "form-control datepicker", type = "text" })

在我的一个观点中,我使用它:

@model PublicationSystem.ViewModels.ProfileEdit
<div class="form-group">
    @Html.LabelFor(model => model.BirthDate, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.BirthDate)
    </div>
</div>

但是,如果我的模型对于BirthDate有Null,我会收到以下消息:

  

传递到字典中的模型项为null,但此字典需要类型为&#39; System.DateTime&#39;的非空模型项。

在模型ProfileEdit中,我的字段定义如下:

[DataType(DataType.Date), Display(Name = "Birth Date")]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime? BirthDate { get; set; }

我怎样才能加载视图,即使那里有空?我做错了什么?

PS,我已经阅读了其他帖子,与此类似,其中大部分都说让我的编辑器模型控件可以为空,但正如你所看到的,我已经这样做了。

更新

这是控制器动作(Mapper.Map只需要模型,并填充ViewModel ProfileEdit):

[CheckId(RedirectToReferrer = true)]
public virtual ActionResult Edit(Guid id)
{
    var profileEdit = Mapper.Map<ProfileEdit>(db.Profile.Find(id));

    if (profileEdit == null)
    {
        return HttpNotFound();
    }

    return View(profileEdit);
}

1 个答案:

答案 0 :(得分:0)

@Mangist是对的。这是属性:

[DataType(DataType.Date), Display(Name = "Birth Date")]

具体来说,数据类型,因为它是Date而非DateTime,就像我的模板一样。