出于某种原因,我试图手动绑定复杂模型的数组,但我在控制器中得到一个空引用异常,绑定器没有检索参数。我发现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的关系。我需要在这个单一视图中有几种不同数据类型的表单。
答案 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