我有以下模型类(为了这个问题的目的,类简化了):
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"/>
}
我还有“ExerciseItemForPupil”的EditorTemplate:
@model MyNamespace.ExerciseItemForPupil
@Html.HiddenFor(model => model.Id)
@Html.TextBoxFor(model => model.UserValue)
问题:可以看出,页面上会有多个表单。我的“ScoreExercise”动作如下:
public ActionResult ScoreExercise(ExerciseForPupil exercise)
{
//exercise.ExerciseItems is NULL
}
但是我在第二级(ExerciseItems)上的嵌套集合为空。我究竟做错了什么?
更新 我已根据@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="">
但它也不起作用