MVC3集合模型与EditorFor绑定

时间:2012-01-18 14:57:50

标签: asp.net-mvc-3 collections razor viewmodel editorfor

关于此post和此other one

假设我有以下内容:

public class Foo
{
   public string Value1 { get; set; }
   public string Value2 { get; set; }
}

public class BarViewModel
{
   public string Baz { get; set; }
   public IList<Foo> Foos { get; set; }
}

我的观点是收到BarViewModel

@model BarViewModel

@Html.EditorFor(model => model.Baz)

<table>
   @for(int i = 0 ; i < Model.Foos.Count ; i ++)
   {
      string name1 = "Foos[" + i.ToString() + "].Value1";
      string name2 = "Foos[" + i.ToString() + "].Value2";

      <tr>
        <td>
           <input type="text" name="@name1" value="@Model.Foos[i].Value1" />
        </td>
        <td>
           <input type="text" name="@name2" value="@Model.Foos[i].Value2" />
        </td>
      </tr>
   }
</table>

在我的控制器中,我有一个POST方法,可以重温BarViewModel

鉴于为Value1和Value2生成的输入名称为"Foos[0].Value1""Foos[1].Value1"等等,在Post方法中,BarViewModel上的集合由ModelBinder自动填充。真棒。

问题是,如果我在我看来这样做:

   @for(int i = 0 ; i < Model.Foos.Count ; i ++)
   {
      <tr>
        <td>
           @Html.EditorFor(model => model.Foos[i].Value1);
        </td>
        <td>
           @Html.EditorFor(model => model.Foos[i].Value2);
        </td>
      </tr>
   }

然后为输入生成的名称类似于"Foos__0__Value1",这会破坏模型绑定。在我的POST方法中,我的BarViewModel的Foos属性现在是null

我遗失了什么?

修改


如果我对集合本身使用EditorFor

@EditorFor(model => model.Foos)

正确生成名称。但这迫使我在/ Views / Share中构建一个ViewModel来处理类型Foos,这将生成行,我真的不想这样做......

编辑2


我会在这里澄清我的问题,我知道这有点模糊。

如果我这样做:

@EditorFor(model => model.Foos)

输入的名称将采用"Foos[0].Value1"形式,模型绑定在帖子上运行正常。

但如果我这样做:

@for(int i = 0 ; i < Model.Foos.Count ; i ++)
{
    @EditorFor(model => Model.Foos[0].Value1)
}

名称采用"Foos__0__Value1"形式,模型绑定不起作用。在我的post方法中,model.Foos将为null。

第二种语法是否会破坏模型绑定?

0 个答案:

没有答案