带有EF6的MVC5:带有ICollection的EditorFor()

时间:2014-05-13 18:18:23

标签: asp.net-mvc asp.net-mvc-5 entity-framework-6 editorfor icollection

我的MVC5 / EF6网站存在问题。我有这样的模型:

model http://img15.hostingpics.net/pics/330453Capturestackoverflow.png

当我创建活动时,我想至少添加一个日期。所以我在表单中创建了一个新字段:

<div class="form-group">
     @Html.LabelFor(model => model.Days, new { @class = "control-label col-md-2" })
     <div class="col-md-10">
         @Html.EditorFor(model => model.Days)
         @Html.ValidationMessageFor(model => model.Days)
     </div>
</div>

根据我在这里和那里阅读的各种来源(https://stackoverflow.com/a/11403858/360708),我必须在View / Shared / EditorTemplates /中创建一个文件Day.cshtml,这样我就可以告诉MVC我希望Day有一个编辑器为“day1”(DatePicker在这里)。

这是因为我的模型Day是Activity里面的ICollection,所以我不能像这样访问字段day1:“model.Days.day1”。我尝试过创建Day.cshtml但它不起作用。这是Day.cshtml的内容

@model GAS_VS2013.Models.Day

@Html.EditorFor(o => o.day1)

我忘记了什么或做错了什么?

由于

1 个答案:

答案 0 :(得分:1)

感谢Fals,它正在使用:

<div class="form-group">
     @Html.LabelFor(model => model.Days, new { @class = "control-label col-md-2" })
     <div class="col-md-10">
         @Html.EditorFor(model => model.Days, "Day")
         @Html.ValidationMessageFor(model => model.Days)
     </div>
</div>

要将文本框显示为HTML5 DatePicker,请不要忘记在EditorTemplates中添加DateTime.cshtml,并使用以下代码(日期字段的类型必须为DateTime):

@model Nullable<DateTime>
@{
   DateTime dt = DateTime.Now;
   if (Model != null)
   {
      dt = (System.DateTime)Model;
   }
   @Html.TextBox("", String.Format("{0:d}", dt.ToShortDateString()), new { @class = "form-control datecontrol", type = "date" })
}

来源:http://www.aubrett.com/InformationTechnology/WebDevelopment/MVC/DatePickerMVC5.aspx