我正在使用ASP.NET MVC,我正在尝试使用字典作为ViewModel中的属性,我希望在该视图中迭代视图并动态生成Dictionary中每个键值对的复选框。我可以成功地使用“值”属性的正确值生成复选框,但是我无法将选中的复选框传播回控制器。
这是viewmodel:
public class DocumentAddModel
{
private DocumentViewModel _documentViewModel;
private Dictionary<int, string> categoryCheckboxes = new Dictionary<int, string>();
private Dictionary<int, string> roleCheckboxes = new Dictionary<int, string>();
private Dictionary<int, string> fundCheckboxes = new Dictionary<int, string>();
public DocumentViewModel DocumentViewModel
{
get { return _documentViewModel; }
set { _documentViewModel = value; }
}
// the key of the dictionary (int) is the id of a Category object and
// the value of the dictionary (string) is the friendly description name
// of the Category object
public Dictionary<int, string> CategoryCheckboxes
{
get { return categoryCheckboxes; }
set { categoryCheckboxes = value; }
}
public Dictionary<int, string> RoleCheckboxes
{
get { return roleCheckboxes; }
set { roleCheckboxes = value; }
}
public Dictionary<int, string> FundCheckboxes
{
get { return fundCheckboxes; }
set { fundCheckboxes = value; }
}
}
以下是生成复选框的视图部分:
<% foreach (KeyValuePair<int, string> categoryCheckbox in Model.CategoryCheckboxes){%>
<input type="checkbox" name= "CategoryCheckboxes" value="<%= categoryCheckbox.Key %>" />
<%= categoryCheckbox.Value%>
<% } %>
然而,当我提交表单时,即使我检查了某些类别,CategoryCheckboxes字典的计数也为零。 我做错了什么?
由于
P.S。我不想使用Html.Checkbox(因为我怀疑有人可能会建议),因为这样做起来同样棘手(我先尝试过)并且我真的不喜欢它产生隐藏字段的想法。
答案 0 :(得分:2)
我不认为默认模型绑定器可以处理填充字典。通常我在这种情况下做的是在模型上有一个属性用于生成控件,另一个属性用于检索选定的值。我没有使用复选框,只是下拉列表,但原则是相同的。您将向模型添加CategoryCheckboxes
数组(类型为int),并在发布表单时填充该数组。它将包含所选复选框的值。同样适用于其他类型的复选框。
public int[] CategoryCheckboxes { get; set; }
public int[] RoleCheckboxes { get; set; }
public int[] FundCheckboxes { get; set; }
我可能会以不同方式命名它们(和相关的HTML输入),例如删除Checkboxes
名字对象。