【问题标题】:Passing JSON array in AJAX call sending null in MVC在 AJAX 调用中传递 JSON 数组在 MVC 中发送 null
【发布时间】:2020-02-08 07:58:03
【问题描述】:

我正在尝试将一个 json 对象数组传递给我的控制器操作,但它一直以 null 的形式出现。

Javascript 代码

function UpdateSelected() {
    var items = {};

    //Loop through grid / sub grids and create json array
    $('.k-detail-row .k-grid').each(function () {
        var grid = $(this).data("kendoGrid");
        var selectedElements = grid.select();
        for (var j = 0; j < selectedElements.length; j++) {
            var item = grid.dataItem(selectedElements[j]);
            var json = item.toJSON();
            items = [].concat(items, json);
        }
    })

    //shift the first empty space out
    items.shift();

    //items is ready to send
    alert(JSON.stringify(items));
    $.ajax({
        cache: false,
        url: '/Update/GetSchematicsForSelectedVariants',
        type: 'GET',
        data: JSON.stringify(items),
        success: function (data) {
            alert("success");
        }
    });
}

Json 数组如下所示:

控制器动作

public JsonResult GetSchematicsForSelectedVariants(List<VariantViewModel> vm)//vm coming in null
{
    return Json(_dataAccessService.GetSchematicsForMacroVariants(vm),JsonRequestBehavior.AllowGet);
}

VariantViewModel

public class VariantViewModel
{
    public string Id { get; set; }
    public string Variant { get; set; }
}

所以我不确定这里出了什么问题。我的列表被传入为空。我并不热衷于将 json 对象传递给控制器​​,但我相信我有我需要的要点。

有人可以指点我正确的方向吗?

【问题讨论】:

  • 我可能错了,但我认为您的问题可能是您将数组传递给data,而不是键值。
  • type:'get' 更改为 type:'post' 或将 [HttpGet] 添加到控制器方法中。
  • 您需要将此类数据作为POST 请求传递。当它是 GET 时,数据会附加到 url。如果您想将其保留为GET,请尝试使用processData: false
  • 感谢您的建议,但这些都不起作用。我将方法更改为 POST,并尝试将控制器更改为 HttpGet。
  • 试试这个@Selthien,用[HttpPost]在c#中标记你的方法,将你的ajax类型更改为POST,不要对你的数据进行字符串化。

标签: javascript asp.net json ajax asp.net-mvc


【解决方案1】:

我发现了问题。我的数据需要在我的 AJAX 请求中以以下方式传递。不敢相信我真的错过了这个。

$.ajax({
        cache: false,
        url: '/Update/GetSchematicsForSelectedVariants',
        type: 'POST',
        data: {'ListOfVariants' : items},
        success: function (data) {
            alert("success");
        }
    });

感谢大家的 cmets,它帮助我指明了正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多