发布到列表<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操作中成功获取它们。