手动将复杂模型数组绑定到控制器操作

时间:2014-06-16 18:43:41

标签: asp.net-mvc model-binding

出于某种原因,我试图手动绑定复杂模型的数组,但我在控制器中得到一个空引用异常,绑定器没有检索参数。我发现this question非常相似(唯一不同的是模型的类型),但我不明白为什么它在我的情况下不起作用。

这就是我所拥有的。

在我的控制器中

public ActionResult MyAction(ComplexType[] models)
{
    foreach(ComplexType c in models) // Exception at this point, the parameter is null
    {
        //Do stuff
    }
}

在我的观点中:

    @using(Html.BeginForm("MyAction","Controller"))
    {
        @Html.AntiForgeryToken()
<table>
        @for (int i = 0; i < Model._MyProperty.Count; i++ )
        {
            var d = Model._MyProperty[i];
            @:<tr>
                @:<td> @Html.CheckBox("models.Property1["+i+"]", d.Property1) 
                    @Html.Hidden("models.ID["+i+"]",d.ID)
                    @Html.Hidden("models.Property2["+i+"]")
                    @Html.Hidden("models.Property3["+i+"]")
                    @Html.Hidden("models.Property4["+i+"]")
                @:  </td>
            @:</tr>
        }

 //Submit Button
 </table>

}

这是我的班级:

class ComplexType
{
    int ID {get;set;}
    int Property1{get;set;}
    int Property2{get;set;}
    int Property3{get;set;}
    int Property4{get;set;}
}

我试图将ComplexType []更改为控制器中的ICollection但它没有工作。另外,仅仅是为了获取信息,我的ViewModel并不是模型我与bing的关系。我需要在这个单一视图中有几种不同数据类型的表单。

1 个答案:

答案 0 :(得分:2)

您正在循环中命名元素,如下所示

<input type="hidden" name="models.Property2[0]" value
<input type="hidden" name="models.Property2[1]" value

什么时候应该

<input type="hidden" name="models[0].Property2" value
<input type="hidden" name="models[1].Property2" value