在不使用 FormCollection 的情况下从 MVC 中动态创建的控件检索回发

发布于 2024-09-04 03:05:37 字数 127 浏览 5 评论 0原文

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

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

I'm passing a List to an MVC view and generating checkboxes for each object in the list (The checkboxes are named t.Name).

I'd like to be able to tell which checkboxes were checked once the form is posted. However, I'd like to avoid using the FormCollection object. Is there any way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

猥琐帝 2024-09-11 03:05:37

将复选框的名称设置为“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();
}

Set the name of your checkboxes to something like "MyObject[" + index + "].Checked", and for each checkbox also put a hidden input field named something like "MyObject[" + index + "].Name" with the value set to t.Name.

If you name your fields like that, the default model binder can take your form values and map them to a list of objects with a Name property and a Checked property.

I would try something like the following:

<% 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><%
} %>

I use the anonymous type with id property so that the MVC framework components don't generate HTML elements with invalid id values, but it isn't really necessary.

Your action handling the post would look something like this:

[HttpPost]
ActionResult MyAction(IList<MyObject> objects)
{
    foreach (MyObject obj in objects)
    {
        if (obj.Checked)
        {
            // ...
        }
        else
        {
            // ...
        }
    }

    return View();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文