发布到列表<modeltype> MVC3

我正在试图让我的视图发布一个列表回到行动,但它保持为空。

所以我的模型有一个WeightEntry对象列表。

运动模型

public class Exercise { public List<WeightEntry> Entries { get; set; } public int ExerciseID { get; set; } public int ExerciseName { get; set; } } 

WeightEntry模型

 public class WeightEntry { public int ID { get; set; } public int Weight { get; set; } public int Repetition { get; set; } } 

我的视图包含了ExerciseName和WeightEntry对象的一个​​forloop

 @model Mymvc.ViewModels.Exercise ... <span>@Model.ExerciseName</span> @using (Html.BeginForm()) { @Html.ValidationSummary(true) <table class="left weight-record"> <tr> <th>Reps</th> <th>Weight</th> </tr> @foreach (var item in Model.Entries) { <tr> <td> @Html.EditorFor(x => item.Repetition) </td> <td> @Html.EditorFor(x => item.Weight) </td> </tr> } </table> <input type="submit" value="Save" /> } 

控制器操作(Post)目前没有任何操作。 我只是想在添加保存代码之前让绑定工作。

 [HttpPost] public ActionResult WeightEntry(Exercise exercise) { try { //Add code here to save and check isvalid return View(exercise); } catch { return View(exercise); } } 

我已经看到了一些小技巧,在MVC2中使用的表单元素的名称加上一个分子,但是我想知道MVC3是否有什么不同? 我希望它能够很好地绑定ID为0或null,但是当我在表单post后检查它时,整个List是空的。 任何帮助表示赞赏。 谢谢。

replace下面的循环:

 @foreach (var item in Model.Entries) { <tr> <td> @Html.EditorFor(x => item.Repetition) </td> <td> @Html.EditorFor(x => item.Weight) </td> </tr> } 

有:

 @for (var i = 0; i < Model.Entries.Count; i++) { <tr> <td> @Html.EditorFor(x => x.Entries[i].Repetition) </td> <td> @Html.EditorFor(x => x.Entries[i].Weight) </td> </tr> } 

或者甚至更好,使用编辑器模板并用以下代码replace循环:

 @Html.EditorFor(x => x.Entries) 

然后定义一个自定义编辑器模板,该模板将自动为Entries集合( ~/Views/Shared/EditorTemplates/WeightEntry.cshtml )的每个元素渲染:

 @model WeightEntry <tr> <td> @Html.EditorFor(x => x.Repetition) </td> <td> @Html.EditorFor(x => x.Weight) </td> </tr> 

生成的input元素将具有正确的名称 ,您将能够在POST操作中成功获取它们。