为了账号安全,请及时绑定邮箱和手机立即绑定

从复选框中获取值并作为列表发布到控制器

从复选框中获取值并作为列表发布到控制器

C#
一只名叫tom的猫 2022-01-09 16:53:59
检查下面的代码。我正在ProductId向我的控制器发布一个列表,并希望使用名为- 的视图模型接收它UpdateProductStatus。但我当前代码的问题是:ajax 成功将其发布到控制器,但UpdateProductStatus无法获取ProductId. 这总是返回 null。我在这里做错了什么?我认为可能在 ajax 中我做错了。我该如何解决这个问题以将所有内容ProductId作为列表表单控制器接收?提前致谢控制器:[HttpPost]        public IActionResult UpdateProductStatus([FromBody]List<UpdateProductStatus> UpdateProductStatus)        {            return Json("ok");        }查看型号:using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;namespace BlexzWeb.ViewModels{    public class UpdateProductStatus    {        public int ProductId { get; set; }    }}查询: $('#btnActivate').on('click', function () {            var allSelectedProductId = [];            var allSelectedProductIdWithKey = [];            $('.chkItems:checked').each(function() {                allSelectedProductId.push($(this).val());            });            for (var _allSelectedProductId in allSelectedProductId) {                allSelectedProductIdWithKey.push('ProductId'+':'+_allSelectedProductId);            }            console.log(allSelectedProductIdWithKey);            //var things = JSON.stringify(allSelectedProductIdWithKey);            var things = JSON.stringify({ 'UpdateProductStatus': allSelectedProductIdWithKey });            console.log(things);            $.ajax({                contentType: 'application/json; charset=utf-8',                dataType: 'json',                type: 'POST',                url: '/Products/UpdateProductStatus',                data: things,                success: function () {                    console.log('sssss');                },                failure: function (response) {                    console.log('fffff');                }            });html:                                        <input type="checkbox" class="chkItems" value="1">                                        <input type="checkbox" class="chkItems" value="2"><button id="btnActivate">Button</button>
查看完整描述

2 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

要绑定到您的控制器方法,您需要发送一个包含名称/值对的对象数组ProductId。要构建对象数组,请使用


$('#btnActivate').on('click', function () {

    var allSelectedProductId = [];

    $('.chkItems:checked').each(function() {

        allSelectedProductId.push({ ProductId: $(this).val() });

    });

    var things = JSON.stringify({ UpdateProductStatus: allSelectedProductId });


    $.ajax({

        contentType: 'application/json; charset=utf-8',

        dataType: 'json',

        type: 'POST',

        url: '/Products/UpdateProductStatus',

        data: things,

        success: function () {

            ....

    });

});


查看完整回答
反对 回复 2022-01-09
?
呼如林

TA贡献1798条经验 获得超3个赞

您当前的代码正在为 ajax 调用发送如下所示的有效负载。


{"UpdateProductStatus":["ProductId:0","ProductId:1"]}

您的操作方法参数是UpdateProductStatus对象列表。因此,要使模型绑定与您当前的操作方法参数签名正常工作,您的有效负载应如下所示。


[{"ProductId":"1"},{"ProductId":"2"}]

无需指定参数名称。只需传递一个项目数组,每个项目都有一个ProductId属性和它的值。


var allSelectedProductIdWithKey = [];

$('.chkItems:checked').each(function () {

    allSelectedProductIdWithKey.push({ ProductId: $(this).val() });

});


var things = JSON.stringify(allSelectedProductIdWithKey);


$.ajax({

    contentType: 'application/json; charset=utf-8',

    type: 'POST',

    url: '/Products/AppendClientFilter',

    data: things,

    success: function (res) {

        console.log('Successs', res);

    },

    failure: function (response) {

        console.log('Error', response);

    }

});

您还可以删除dataTypein ajax 调用。jQuery ajax 将从响应标头中猜测正确的类型,在您的情况下,您将显式返回 JSON。


查看完整回答
反对 回复 2022-01-09
  • 2 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信