我正在尝试对一组动态生成的复选框进行模型绑定,以便在控制器操作中处理它们,但无法进行模型绑定。这是场景:
我的 ViewModel 类 (DocumentAddEditModel) 包含一个字典 (Dictionary),其中每个条目的字符串是每个复选框的名称/标签,以及指示是否选中该复选框的布尔值:
public class DocumentAddEditModel
{
...
private Dictionary<string, bool> _categoryCheckboxes = new Dictionary<string,bool>();
...
...
public Dictionary<string, bool> CategoryCheckboxes
{
get { return _categoryCheckboxes; }
set { _categoryCheckboxes = value; }
}
...
}
}
在我的控制器中,处理表单 GET 请求的操作将填充字典,如下所示:
public class DocumentsController : Controller
{
[RequiresAuthentication]
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Add()
{
DocumentAddEditModel documentAddEditModel = new DocumentAddEditModel();
...
Dictionary<string, bool> categoryCheckboxes = new Dictionary<string, bool>();
...
string[] categories = Enum.GetNames(typeof(Category));
foreach (string category in categories)
categoryCheckboxes.Add(category, false);
documentAddEditModel.CategoryCheckboxes = categoryCheckboxes;
return View(documentAddEditModel);
}
}
在视图中,我有以下内容来生成复选框:
<% foreach (KeyValuePair<string, bool> categoryCheckbox in ViewData.Model.CategoryCheckboxes)
{%>
<input class="checkbox" type="checkbox" name="CategoryCheckboxes[0].Key" id="<%= categoryCheckbox.Key %>" />
<label class="categoryLabel" for="<%= categoryCheckbox.Key %>"><%= categoryCheckbox.Key %></label>
<% } %>
但我认为这一定是问题所在。不确定 name 属性需要做什么。问题是一旦回发到 DocumentsController 中的以下操作方法:
[RequiresAuthentication]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(DocumentAddEditModel documentAddEditModel)
{
...
}
documentAddEdit.Model.CategoryCheckboxes 始终为 null。我如何进行设置,以便使用复选框的名称和选中/未选中的布尔值正确填充 CategoryCheckboxes 字典?
Thanks