【发布时间】:2009-06-23 08:53:59
【问题描述】:
我正在尝试对一组动态生成的复选框进行模型绑定,以便在控制器操作中处理它们,但无法使模型绑定发生。这是场景:
我的 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>
<% } %>
但我认为这就是问题所在。不确定名称属性中需要做什么。问题是一旦回发到 DocumentsController 中的以下操作方法:
[RequiresAuthentication]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(DocumentAddEditModel documentAddEditModel)
{
...
}
documentAddEdit.Model.CategoryCheckboxes 始终为空。我该如何设置,以便 CategoryCheckboxes 字典正确填充复选框的名称和选中/未选中的布尔值?
谢谢
【问题讨论】:
标签: asp.net-mvc model-view-controller