【发布时间】:2013-04-28 20:21:32
【问题描述】:
我有以下模型类(为本问题的目的简化了类):
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 中,我为我的锻炼项目调用编辑器模板
@Html.EditorFor(x=>x.ExerciseItems)
这会为 UserValue 属性呈现以下标记:
<input id="Lesson_Exercises_0__ExerciseItems_1__UserValue" name="Lesson.Exercises[0].ExerciseItems[1].UserValue" type="text" value="">
但它也不起作用
【问题讨论】:
标签: asp.net-mvc-4 mvc-editor-templates