我在MVC中有以下类布局:
public class ReportModel { List<SomeItem> items; string value; string anotherValue; }
现在我在这种类型的MVC中创建一个强类型视图,并使可编辑的文本字段编辑每个值,并使用foreach循环填充文本字段以编辑someitem列表中的项目.
当我提交到httppost方法时,单个值在reportmodel对象中返回正常,但列表不会在对象中返回.该怎么做?
当我说httppost时,我指的是MVC发回的方法
[HttpPost] public ActionResult EditReport(ReportModel report) { // Save the report in here after the update on the UI side }
查看发布someitem列表的代码
if (Model.items != null && Model.items.Count > 0) { for (int i = 0; i < Model.items.Count; i++) { <div class="editrow"> <div class="edititem"> <div class="editor-label"> @Html.LabelFor(m => m.items.ElementAt(i).propertyOne) </div> <div class="editor-field"> @Html.TextBoxFor(m => m.items.ElementAt(i).propertyOne) @Html.ValidationMessageFor(m => m.items.ElementAt(i).propertyOne) </div> </div> <div class="edititem"> <div class="editor-label"> @Html.LabelFor(m => m.items.ElementAt(i).propertyTwo) </div> <div class="editor-field"> @Html.TextBoxFor(m => m.items.ElementAt(i).propertyTwo) @Html.ValidationMessageFor(m => m.items.ElementAt(i).propertyTwo) </div> </div> <div class="edititem"> <div class="editor-label"> @Html.LabelFor(m => m.items.ElementAt(i).propertyThree) </div> <div class="editor-field"> @Html.TextBoxFor(m => m.items.ElementAt(i).propertyThree) @Html.ValidationMessageFor(m => m.items.ElementAt(i).propertyThree) </div> </div> </div> } }
解决方法
不要在lambda表达式中使用ElementAt(1)=>这会破坏您输入的字段名称.请阅读Kirill建议你的博客文章.
所以你可以使用索引访问:
for (int i = 0; i < Model.items.Count; i++) { <div class="editrow"> <div class="edititem"> <div class="editor-label"> @Html.LabelFor(m => m.items[i].propertyOne) </div> <div class="editor-field"> @Html.TextBoxFor(m => m.items[i].propertyOne) @Html.ValidationMessageFor(m => m.items[i].propertyOne) </div> </div> <div class="edititem"> <div class="editor-label"> @Html.LabelFor(m => m.items[i].propertyTwo) </div> <div class="editor-field"> @Html.TextBoxFor(m => m.items[i].propertyTwo) @Html.ValidationMessageFor(m => m.items[i].propertyTwo) </div> </div> <div class="edititem"> <div class="editor-label"> @Html.LabelFor(m => m.items[i].propertyThree) </div> <div class="editor-field"> @Html.TextBoxFor(m => m.items[i].propertyThree) @Html.ValidationMessageFor(m => m.items[i].propertyThree) </div> </div> </div> }
当然,为了让索引器访问集合,假设您的items属性被声明为List< SomeItem>或SomeItem [].如果是IEnumerable< SomeItem>它不会起作用.因此,只需在视图模型上更改此属性的类型即可.