我将一个列表传递给一个 MVC 视图并为列表中的每个对象生成复选框(这些复选框被命名为 t.Name)。
我希望能够知道表单发布后哪些复选框被选中。但是,我想避免使用 FormCollection 对象。有没有办法做到这一点?
我将一个列表传递给一个 MVC 视图并为列表中的每个对象生成复选框(这些复选框被命名为 t.Name)。
我希望能够知道表单发布后哪些复选框被选中。但是,我想避免使用 FormCollection 对象。有没有办法做到这一点?
将复选框的名称设置为“MyObject[” + index + “].Checked”,并为每个复选框添加一个名为“MyObject[” + index + “].Name” 的隐藏输入字段,其值设置为 t.Name。
如果您这样命名字段,默认模型绑定器可以获取您的表单值并将它们映射到具有 Name 属性和 Checked 属性的对象列表。
我会尝试以下方法:
<% foreach(var t in Model)
{ %>
<div>
<%= Html.Hidden("MyObject[" + index + "].Name", t.Name, new { id = "MyObject_" + index + "_Name" }) %>
<%= Html.Checkbox("MyObject[" + index + "].Checked", false, new { id = "MyObject_" + index + "_Checked" }) %>
</div><%
} %>
我使用带有 id 属性的匿名类型,以便 MVC 框架组件不会生成具有无效 id 值的 HTML 元素,但这并不是必需的。
您处理帖子的操作如下所示:
[HttpPost]
ActionResult MyAction(IList<MyObject> objects)
{
foreach (MyObject obj in objects)
{
if (obj.Checked)
{
// ...
}
else
{
// ...
}
}
return View();
}