У меня есть следующие классы модели (классы упрощает для целей данного вопроса):ASP.NET MVC 4 - EditorTemplate для вложенных коллекций
public class Lesson
{
public Guid Id {get;set;}
public string Name {get;set;}
public List<ExerciseForPupil> Exercises {get;set;}
}
public class ExerciseForPupil
{
public Guid Id {get;set;}
public string Name {get;set;}
public List<ExerciseItemForPupil> ExerciseItems {get;set;}
}
public class ExerciseItemForPupil
{
public Guid Id {get;set;}
public string Content {get;set;}
public string UserValue {get;set;}
}
Теперь я хочу, чтобы пользователи могли в филь «UserValue» значение для каждого упражнения в уроке. Предположим, что для урока есть 5 упражнений. я сделать эти упражнения следующим
@Html.EditorFor(x=>x.Lesson.Exercises)
Какой передающее EditorTemplate, который выглядит следующим образом: @model MyNamespace.ExerciseForPupil
@using (Html.BeginForm("ScoreExercise", "SharedLesson", FormMethod.Post))
{
@Html.Hidden("Id", Model.Id)
@if (Model.ExerciseItems != null)
{
foreach (var exerciseItem in Model.ExerciseItems)
{
@Html.EditorFor(x => exerciseItem, "ExerciseItemForPupil")
}
}
<input type="submit" value="Submit"/>
}
Я также EditorTemplate для "ExerciseItemForPupil":
@model MyNamespace.ExerciseItemForPupil
@Html.HiddenFor(model => model.Id)
@Html.TextBoxFor(model => model.UserValue)
Проблема: Как видно, на странице будет несколько форм. Мои действия «ScoreExercise» выглядит следующим образом:
public ActionResult ScoreExercise(ExerciseForPupil exercise)
{
//exercise.ExerciseItems is NULL
}
Но моя вложенная коллекция на втором уровне (ExerciseItems) равна нулю. Что я делаю неправильно?
UPDATE Я изменил код в соответствии с @MysterMan советов: Я называю шаблон редактор для упражнений следующим образом:
@Html.EditorFor(x => x.Lesson.Exercises)
и внутри этого EditorTemplate я называю редактор шаблоны для моего ExerciseItems
@Html.EditorFor(x=>x.ExerciseItems)
это делает следующую разметку для свойства UserValue:
<input id="Lesson_Exercises_0__ExerciseItems_1__UserValue" name="Lesson.Exercises[0].ExerciseItems[1].UserValue" type="text" value="">
, но он не работает также
, конечно, мой последний класс является незаконным. Это была моя ошибка. Но спасибо, что указали это –
@PiotrPtak. У вас также есть ошибки в ExerciseForPupil и Lesson, у последних свойств у каждого нет имени свойства. Дело в том, что я должен делать предположения о вещах, если вы не предоставляете действительный код. Эти допущения могут быть или не быть правильными, поэтому старайтесь предоставить код, который действительно работает. –
Я обновил свой вопрос. Я также избавляюсь от foreach и передаю коллекции в мои шаблоны редакторов, но он тоже не работает –