我目前正在编辑一个自定义对象,它有一个词典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