我为我的妻子创建了一个网站。她是一名教师,她希望有机会为学生创造锻炼。例如,她想创建以下练习:
练习1:使用正确的单词填写句子:
- 我的妻子是30岁......
- 我住在这个城市30 .........
醇>
我有以下型号:
public class Exercise
{
[Key]
public Guid Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public ExerciseType Type { get; set; }
public DifficulityLevel DifficulityLevel { get; set; }
public List<ExerciseItem> Items { get; set; }
public DateTime TimeOfCreation { get; set; }
public DateTime TimeOfModification { get; set; }
}
public class ExerciseItem
{
[Key]
public Guid Id { get; set; }
public string Content { get; set; }
public List<ExerciseItemOption> Options { get; set; }
public ExerciseItemOption CorrectSelection { get; set; }
}
我为我的练习创建了一个视图。我可以填写基本属性,如名称,描述,Difficulity等级和类型。然后我想创建一个按钮“添加锻炼项目”。单击时,应该动态添加部分视图(或其他内容),以便可以提供新的ExerciseItem。 我试过跟随: 我添加了一个按钮
@Ajax.ActionLink("Add exercise item",
"AddExerciseItem",
"Exercise", new AjaxOptions() { HttpMethod="GET", InsertionMode = InsertionMode.InsertBefore, UpdateTargetId="ExerciseItems"})
和适当的div:
<div id="ExerciseItems"></div>
我的行动方法如下:
public ActionResult AddExerciseItem()
{
return PartialView("ExerciseItem", new ExerciseItem());
}
和部分视图:
@model ElangWeb.Models.ExerciseItem
<fieldset>
<legend>ExerciseItem</legend>
@Html.HiddenFor(model => model.Id)
<div class="editor-label">
@Html.DisplayNameFor(model => model.Content)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Content, new { style = "width:200px" })
</div>
</fieldset>
工作正常。但是,当我单击按钮创建整个练习时,我的模型中没有ExerciseItem集合:
public ActionResult Create(Exercise exercise)
{
using (PersistanceManager pm = new PersistanceManager())
{
exercise.Id = Guid.NewGuid();
exercise.TimeOfCreation = DateTime.Now;
exercise.TimeOfModification = DateTime.Now;
pm.ExcerciseRepository.Add(exercise);
}
return RedirectToAction("Index");
}
我应该如何更改代码以便将添加的ExerciseItem对象列表绑定到我的模型练习?
答案 0 :(得分:1)
听起来这就是你要找的东西。 MVC3 Non-Sequential Indices and DefaultModelBinder 它介绍了如何回发动态的项目集合。
答案 1 :(得分:1)
查看有关模型绑定的article。您基本上需要为锻炼项目创建特殊名称,以便它们正确绑定。
e.g。部分:
@model ElangWeb.Models.ExerciseItem
<fieldset>
<legend>ExerciseItem</legend>
<label>content</label>
<input type="hidden" name="ExcersiseItem.Index" value="SomeUniqueValueForThisItem" />
<input type="text" name="ExcersiseItem[SomeUniqueValueForThisItem].Name" value="@Model.Content" />
</fieldset>
您还可以查看我对此问题MVC3 Non-Sequential Indices and DefaultModelBinder的回答。感谢Yarx找到它,我实际上是想找到它:)