2014-03-07 99 views
2

我正在使用ASP.Net MVC4(Razor)。我有以下代碼:MVC模型不綁定到字典

Dictionary<string, OccasionObject> occasionList = new Dictionary<string, OccasionObject>()

的關鍵是時機的類的字符串。該occassion對象有3個屬性:isAttending(bool)ID(int)Name(string)

在我CSHTML文件,我做了以下內容:

@foreach(string s in model.occasionList .Keys) 
{ 
    foreach(var o in model.occasionList .Keys[s]) 
    { 
     @Html.CheckBoxFor(m=>m.occasionList[s].FirstOrDefault(ev=>ev.ID == o.ID).isAttending); 
    } 
} 

此完美結合的負荷,檢查的箱子,我在SQL人工檢查。但是,當我將此模型POST回服務器時,occasionList字典爲空。模型綁定很好,因爲模型中的其他屬性仍然返回。

任何想法?

感謝, 大教堂

+0

看來你在OccasionObject上使用FirstOrDefault,是不是字典'Dictionary >'而不是'Dictionary '? – Rui

回答

2

模型綁定對待字典作爲一個集合,如果你想像字典作爲IEnumerable<KeyValuePair<string, IEnumerable<OccasionObject>>>很容易理解爲什麼它沒有被綁定。

什麼@Html.CheckBoxFor(m=>m.occasionList[s].FirstOrDefault(ev=>ev.ID == o.ID).isAttending);的產生是:

<input type="checkbox" name="occasionList[0].Value.isAttending" ../>

所以關鍵是缺少的。

試試這個:

@Html.Hidden("occasionList.Index", s) 
@Html.CheckBoxFor(m=>m.occasionList[s].FirstOrDefault(ev=>ev.ID == o.ID).isAttending); 
@Html.HiddenFor(m=>m.occasionList[s].Key) 

第一隱藏是因爲你可能有你自己的指標失靈,and explicitly providing an ".Index"是有這些背景下的模型綁定工作的唯一辦法。

Here's描述模型綁定到集合的另一個資源。

+0

真棒文章。說得通。我會讓你知道,如果這個工程一旦我試過了。 – devza

+0

@ user422596你是否設法讓它起作用? – Rui