在我的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);
}
答案 0 :(得分:0)
@Mangist是对的。这是属性:
[DataType(DataType.Date), Display(Name = "Birth Date")]
具体来说,数据类型,因为它是Date
而非DateTime
,就像我的模板一样。