如何获取复选框列表并将其发送到列表对象中的操作?

发布于 2024-10-14 16:01:03 字数 107 浏览 1 评论 0原文

如何获取复选框列表并将其发送到 IList 对象中的 Action?我想使用 jQuery 从我的页面获取对象列表,然后创建对象并将其发送到操作方法。在操作方法中,它应该是 List .net 对象。

How to grab list of checkboxes and send it to Action in IList object? I would like to use jQuery to grab list of objects from my page, then create object and send it to action method. In action method it should be List .net object.

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

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

发布评论

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

评论(1

弄潮 2024-10-21 16:01:03

假设您的标记中有一个复选框列表:

<input type="checkbox" name="c1" checked="checked" />
<input type="checkbox" name="c2" />
<input type="checkbox" name="c3" checked="checked" />
<input type="checkbox" name="c4" />

以及一个将采用值的控制器操作:

[HttpPost]
public ActionResult Foo(IEnumerable<bool> values)
{
    ...
}

您可以像这样调用它:

var values = $(':checkbox').map(function () {
    return $(this).is(':checked');
}).toArray();

$.ajax({
    url: '<%= Url.Action("Foo") %>',
    type: 'post',
    traditional: true,
    data: { values: values },
    success: function (result) {
        alert('ok');
    }
});

现在假设您还想发送复选框的名称。这样您就可以执行以下操作:

[HttpPost]
public ActionResult Foo(IEnumerable<MyViewModel> values)
{
    ...
}

其中 MyViewModel 如下所示:

public class MyViewModel
{
    public string Name { get; set; }
    public bool IsChecked { get; set; }
}

在这种情况下,您可以将请求作为 JSON 字符串发送。这在 ASP.NET MVC 3 中可以开箱即用,因为有一个内置的 JsonValueProviderFactory 能够解析 JSON 请求并将它们绑定到强类型模型,但如果您使用的是旧版本,则可以仍然 手动定义此自定义提供程序

var values = $(':checkbox').map(function () {
    return { name: this.name, isChecked: $(this).is(':checked')};
}).toArray();

$.ajax({
    url: '<%= Url.Action("Foo") %>',
    type: 'post',
    contentType: 'application/json',
    data: JSON.stringify({ values: values }),
    success: function (result) {
        console.log(result);
    }
});

Assuming you have a list of checkboxes in your markup:

<input type="checkbox" name="c1" checked="checked" />
<input type="checkbox" name="c2" />
<input type="checkbox" name="c3" checked="checked" />
<input type="checkbox" name="c4" />

and a controller action which will take the values:

[HttpPost]
public ActionResult Foo(IEnumerable<bool> values)
{
    ...
}

you could invoke it like this:

var values = $(':checkbox').map(function () {
    return $(this).is(':checked');
}).toArray();

$.ajax({
    url: '<%= Url.Action("Foo") %>',
    type: 'post',
    traditional: true,
    data: { values: values },
    success: function (result) {
        alert('ok');
    }
});

Now let's suppose that you wanted to send the name of the checkbox as well. So that you could have the following action:

[HttpPost]
public ActionResult Foo(IEnumerable<MyViewModel> values)
{
    ...
}

where MyViewModel looks like this:

public class MyViewModel
{
    public string Name { get; set; }
    public bool IsChecked { get; set; }
}

In this case you could send the request as JSON string. This will work out of the box in ASP.NET MVC 3 because there is a JsonValueProviderFactory built-in capable of parsing JSON requests and binding them to strongly typed models but if you are working in older versions you could still define this custom provider manually:

var values = $(':checkbox').map(function () {
    return { name: this.name, isChecked: $(this).is(':checked')};
}).toArray();

$.ajax({
    url: '<%= Url.Action("Foo") %>',
    type: 'post',
    contentType: 'application/json',
    data: JSON.stringify({ values: values }),
    success: function (result) {
        console.log(result);
    }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文