2011-11-30 111 views
0

我想创建一个项目集合的编辑窗体。列表为空,当我检查ModelState时,它的有效属性是“真”,它有0个键。 People实体上没有必需的属性。ASP.NET Mvc 3模型绑定到集合不起作用

查看

@using(Html.BeginForm("UpdatePeople", "People", FormMethod.Post })) 
{ 
    @for (var i = 0; i < Model.People.Count; i++) 
    { 
     <div> 


@Html.TextBoxFor(t => t.People[i].FirstName) 



     </div> 
    } 
} 

控制器

[HttpPost] 
public ActionResult UpdatePeople(List<People> items) 
{      
// items is null 
} 

回答

1

动作方法接收不List<People>类型的收到您的视图模型模型。

我没有看到你的模型定义,所以有一点样本。

它看起来像你有一个模型,它有一个属性People类型List<People>

public class MyViewModel 
{ 
    public List<People> People { get; set; } 
    // other properties 
} 

如果现在提交表单,MVC尝试绑定。你的行动方法称它收到

List<People> 

但你的发送MyViewModel

所以,如果你改变你的操作方法

[HttpPost] 
public ActionResult UpdatePeople(MyViewModel model) 
{      
    // model.People exists 

} 

它会奏效。

如果您的ViewModel只有一个特性People,则不需要此模型。 您可以将List<Person>传递给您的视图。

希望这有助于

+0

操作方法会绑定到任何传递给它,它可以用什么与请求发送匹配。它不*必须是传递给视图的视图模型。它可以是随机属性,也可以是属性与参数名称对齐的任何模型类。 –

+0

是的,我知道ModelBinder是如何工作的。但这是这里的问题。你说得对,也许我应该让这个更清楚。 – dknaack