我目前正在編輯一個自定義對象,它有一個詞典Dictionary<MyOtherObject,Boolean>
。ASP.NET MVC 3:編輯項目的「集合」
public class MyObject{
public int SomeProperties{get;set;}
public int SomeMoreProperties{get;set;}
....
public Dictionary<MyOtherObject, Boolean> Attributions{get;set;}
}
目標是我可以有一個複選框的列表中的每個項目字典,並決定檢查與否。
我試着爲我的「歸因」屬性製作和編輯模板。它顯示完美,考慮哪些值已被選中。但是,當我提交時,我收到字典的空。
那麼這樣做的好方法是什麼?
我發現這個stack overflow post它有幾乎相同的問題,而不是我有一個字典,而不是簡單的屬性。 MVC如何處理它們?
我可以轉換我的數據,但我沒有看到一種方法沒有元素的「列表」。同時還發現this,但沒有答案
編輯 我的同事也做了一些嘗試,開始只顯示一個布爾值,而不是對象的列表的列表:與對象
public class TheViewObject{
//other fields
List<bool> MyList{get;set;}
}
在視圖如果我們用@Html.EditorFor(m=>m.MyList)
生成表單,我們拿到的這款:
<input checked="checked" class="check-box" data-val="true" data-val-required="The Boolean field is required." id="MyList_0_" name="MyList[0]" value="true" type="checkbox">
<input class="check-box" data-val="true" data-val-required="The Boolean field is required." id="MyList_1_" name="MyList[1]" value="true" type="checkbox">
<input checked="checked" class="check-box" data-val="true" data-val-required="The Boolean field is required." id="MyList_2_" name="MyList[2]" value="true" type="checkbox">
<input name="MyList[0]" value="false" type="hidden"><input name="MyList[1]" value="false" type="hidden"><input name="MyList[2]" value="false" type="hidden">
它的工作原理,因爲它直接知道如何處理List<bool>
。此代碼正常工作,並且我們會在表單返回中收到正確的數據
現在,如果我們有一個模板
@model List<bool>
@for (int i = 0; i < Model.Count; i++) {
@Html.EditorFor(x => Model[i])
}
而結果:
<input checked="checked" class="check-box" data-val="true" data-val-required="The Boolean field is required." id="MyList__0_" name="MyList.[0]" value="true" type="checkbox">
<input name="MyList.[0]" value="false" type="hidden">
<input class="check-box" data-val="true" data-val-required="The Boolean field is required." id="MyList__1_" name="MyList.[1]" value="true" type="checkbox">
<input name="MyList.[1]" value="false" type="hidden">
<input checked="checked" class="check-box" data-val="true" data-val-required="The Boolean field is required." id="MyList__2_" name="MyList.[2]" value="true" type="checkbox">
<input name="MyList.[2]" value="false" type="hidden"> </td>
結果基本上是一樣的,只不過,我們有一個額外的 「」在MyList和[x]之間。有了這個合成器,模型綁定器無法弄清楚如何綁定對象。
我認爲這基本上是什麼也與我們的字典發生之前
(我目前正在測試Steve Sanderson's begincollectionitem)(我們已經有一個列表,而不是,同樣的問題測試)
但我怎麼能知道是什麼,可自動或沒有做過? – J4N 2012-02-02 14:32:28