Mat*_*hew 11 model-view-controller asp.net-mvc
我正在尝试建模绑定一组动态生成的复选框,以便在控制器操作中处理它们,但无法使模型绑定发生.这是场景:
我的ViewModel类(DocumentAddEditModel)包含一个字典(Dictionary <string,bool>),每个条目的字符串是每个复选框的名称/标签,以及指示是否选中该复选框的布尔值:
public class DocumentAddEditModel
{
...
private Dictionary<string, bool> _categoryCheckboxes = new Dictionary<string,bool>();
...
...
public Dictionary<string, bool> CategoryCheckboxes
{
get { return _categoryCheckboxes; }
set { _categoryCheckboxes = value; }
}
...
}
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,处理表单的GET请求的操作会填充dictonary,如下所示:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
在视图中,我有以下内容来生成复选框:
<% 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>
<% } %>
Run Code Online (Sandbox Code Playgroud)
但我认为这是问题所在.不确定name属性中需要做什么.问题是,一旦在DocumentsController中回复到以下操作方法:
[RequiresAuthentication]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(DocumentAddEditModel documentAddEditModel)
{
...
}
Run Code Online (Sandbox Code Playgroud)
documentAddEdit.Model.CategoryCheckboxes始终为null.我如何设置这个以便为CategoryCheckboxes字典正确填充名称和复选框的已检查/未选中bool值?
谢谢
eu-*_*-ne 10
如果您将复选框绑定到Dictionary<string, bool>试试这个:
<% var i = 0; %>
<% foreach (KeyValuePair<string, bool> categoryCheckbox in Model.CategoryCheckboxes) {%>
<input type="hidden" name="<%= String.Format("CategoryCheckboxes[{0}].Key", i) %>" value="<%= categoryCheckbox.Key %>" />
<%= Html.CheckBox(String.Format("CategoryCheckboxes[{0}].Value", i), categoryCheckbox.Value) %>
<label class="categoryLabel" for="<%= categoryCheckbox.Key %>"><%= categoryCheckbox.Key %></label>
<% i++; %>
<% } %>
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
更新:
对于绑定到IDictionary<T1, T2>表单,必须包含带有"CategoryCheckboxes [n] .Key"和"CategoryCheckboxes [n] .Value"Ids/Names的输入,其中n必须从零开始且不间断.
| 归档时间: |
|
| 查看次数: |
8243 次 |
| 最近记录: |