MVC5 с EF6: EditorFor() с ICollection

У меня проблема с моим веб-сайтом MVC5/EF6. У меня есть такая модель:

model
(источник: hostingpics. сеть)

Когда я создаю действие, я хотел бы добавить к нему хотя бы одну дату. Итак, я создал новое поле в форме:

<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) , я должен создать файл Day.cshtml в View/Shared/EditorTemplates/, чтобы указать MVC, что я хочу, чтобы у Day был редактор для day1 (здесь DatePicker).

Это связано с тем, что моя модель Day является ICollection внутри Activity, поэтому я не могу получить доступ к полю day1 следующим образом: model.Days.day1. Я пытался создать Day.cshtml, но это не сработало. Вот содержимое Day.cshtml

@model GAS_VS2013.Models.Day

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

Я что-то забыл или делаю что-то не так?

Спасибо


person Kriegalex    schedule 13.05.2014    source источник
comment
Вы не передаете путь к своему шаблону в качестве параметра EditorFor.   -  person Fals    schedule 13.05.2014
comment
Спасибо, Фальс. Что ж, теперь у меня правильно отображается моя форма с моим средством выбора даты, но когда я нажимаю кнопку «Отправить», когда я проверяю в режиме отладки, объект активности имеет поле «Дни» равным нулю. Как я могу получить значение даты?   -  person Kriegalex    schedule 14.05.2014
comment
на данный момент я перестал использовать EditorFor(model => model.Days, Day) для использования базового HTML 5 ‹input name=day id=day type=date/›, из которого я получаю значение в контроллере с помощью Request[day] .Нанизывать(). Я не пользуюсь преимуществами EF, но, по крайней мере, он работает   -  person Kriegalex    schedule 14.05.2014


Ответы (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>

Чтобы отобразить текстовое поле как DatePicker HTML5, не забудьте добавить DateTime.cshtml в EditorTemplates со следующим кодом (тип вашего поля дня должен быть 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(

person Kriegalex    schedule 13.05.2014