如何在foreach中使用EditorFor

时间:2009-12-31 05:02:04

标签: asp.net-mvc mvc-editor-templates

我有一个模特:

public class MyListModel
{
    public int ID {get;set;}
    public List<User> Users{get;set;}
}

如何在foreach中使用Html.EditorFor方法?

@model MyListModel
<table>
  <tr>
    <th></th>
  </tr>
  @foreach (var item in Model.Users) {
     <tr>
       <td>
          @Html.EditorFor(item.Enabled)
       </td>
     </tr>
  }
</table>

3 个答案:

答案 0 :(得分:61)

@Html.EditorFor(x=> item.Enabled)

有人多次指出,将这样的模型发布回服务器默认情况下不能在mvc中运行。 要在循环中使用EditorFor正确编辑,for应该用作:

 @for(var i = 0; i< Model.Users.Count;i++){
      Html.EditorFor(i=>Model.Users[i])
 }

答案 1 :(得分:12)

@for (var i = 0; i < Model.Users.Count; i++)
{
<tr>
    <td>@Html.EditorFor(model => model.Users[i].Enabled)</td>
    <td>@Html.EditorFor(model => model.Users[i].FirstName)</td>
    <td>@Html.EditorFor(model => model.Users[i].LastName)</td>
</tr>
}

此外,还需要为用户的至少一个属性设置一些隐藏变量:

@for (var i = 0; i < Model.Users.Count; i++)
{
    @Html.HiddenFor(model => model.Users[i].FirstName)
}

不是你称之为优雅的,但它适用于你的后期行动中的绑定。

答案 2 :(得分:1)

是否还有其他原因(例如除外)自己明确使用foreach?您可以为User class创建自定义编辑器(或显示)帮助程序并生成@Html.EditorFor(model=>model.Users)。 Razor将在内部使用foreach来处理您的自定义助手的每个元素。

对于那些访问这个问题的人来说,只是一个想法,真的不知道如何管理这个案例。