尝试将项目的 IList 绑定到视图时,HttpPost 方法可能会出现问题。虽然存在 Phil Haack 的文章等有用资源,但它们可能无法反映 MVC 4 中的潜在更新。为了解决这个问题,让我们探索详细的解决方案。
public class MyViewModel { public List<Person> Persons{get;set;} }
@model MyViewModel @for( int i = 0; i < Model.Persons.Count(); ++i) { @Html.HiddenFor(m => m.Persons[i].PersonId) @Html.EditorFor(m => m.Persons[i].FirstName) @Html.EditorFor(m => m.Persons[i].LastName) }
[HttpPost]public ViewResult(MyViewModel vm) { ... }
请注意,只有具有输入字段的属性在回发后才会有值。此外,MVC 的模型绑定机制仅识别连续的 ID。考虑这个有条件隐藏项目的示例:
@for( int i = 0; i < Model.Persons.Count(); ++i) { if(i != 4)//conditionally hide 5th item, { //but BUG occurs on postback, all items after 5th will not be bound to the the list @Html.HiddenFor(m => m.Persons[i].PersonId) @Html.EditorFor(m => m.Persons[i].FirstName) @Html.EditorFor(m => m.Persons[i].LastName) } }
在这种情况下,只有前四个项目将在回发时绑定。为了避免这种情况,请确保 IList 中所有项目的 ID 连续。
以上是如何在 ASP.NET MVC 4 中有效处理模型与列表的绑定?的详细内容。更多信息请关注PHP中文网其他相关文章!