2011-11-30 100 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