0

我将一个列表传递给一个 MVC 视图并为列表中的每个对象生成复选框(这些复选框被命名为 t.Name)。

我希望能够知道表单发布后哪些复选框被选中。但是,我想避免使用 FormCollection 对象。有没有办法做到这一点?

4

1 回答 1

1

将复选框的名称设置为“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();
}
于 2010-06-03T19:02:28.853 回答