【问题标题】:ASP.Net Core Razor Ajax Request JSON value nullASP.Net Core Razor Ajax 请求 JSON 值 null
【发布时间】:2021-06-20 03:24:52
【问题描述】:

我正在为我的应用程序使用 .Net Core razor。

当我从我的 Ajax 调用控制器动作时,我传递给控制器​​的值为 null。

这是我的脚本:

var table = $('#dataTable').DataTable();
var data = table.$('input[type="checkbox"]').serializeArray();
console.log(data);

var data_json = JSON.stringify({ 'data_json': data });
console.log(data_json);

        $.ajax({
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            type: "GET",
            url: '@Url.Action("UpdateChart","Home")',
            data: data_json,
            cache: false,
            success: function (result) {
                myFunction(result);
                chart.render();
                console.log(result);
            }
        });
    }

我只是获取选定复选框的值并将它们转换为 JSON。

我的控制器是:

[HttpGet]
        public JsonResult UpdateChart(List<CheckBoxArray> data_json)
        {
            ChartRepository repository = new ChartRepository();
            string deviceSerialNo = HttpContext.Session.GetString("currentSerialNumber") != null ? HttpContext.Session.GetString("currentSerialNumber").ToString() : "1606008363";
            string query = repository.PrepSelectQuery("1", deviceSerialNo, "2021-03-04 10:04:55.544398", "2021-03-05 10:46:55.544398");
            GeneralObjects.ServiceResponse response = repository.GetChartData(query);

            TempData["AllData"] = response.This_Object;
            return Json(new { myData = response.This_Object.ToString() });
        }
public class CheckBoxArray
    {
        public string Name { get; set; }
        public string Value { get; set; }
    }

这里的 List data_json 为空。但是,数据是这样的:

{"data_json":[{"name":"chkBox","value":"1"},{"name":"chkBox","value":"4"},{"name":"chkBox","value":"7"}]}

这里有什么问题我无法获得价值?

【问题讨论】:

    标签: jquery json ajax asp.net-core razor


    【解决方案1】:

    当我从我的 Ajax 调用控制器动作时,我传递给控制器​​的值为 null。

    根据您的代码,我们可以发现您希望将CheckBoxArray 对象列表从ajax 客户端传递给控制器​​,并将请求方法设置为GET,这将通过查询字符串传递数据.

    为了达到要求,使数据可以按预期绑定到动作参数List&lt;CheckBoxArray&gt; data_json,你可以尝试修改客户端代码,根据你的json数组数据动态生成查询字符串,如下所示。

    var qparam = "";
    
    for (var i = 0; i < data.length; i++) {
        qparam += "data_json[" + i + "].name=" + data[i].name + "&data_json[" + i + "].value=" + data[i].value + "&";
    }
    
    $.ajax({
        contentType: "application/json; charset=utf-8",
        dataType: 'json',
        type: "GET",
        url: '@Url.Action("UpdateChart","Home")?' + qparam.substring(0, qparam.length - 1),
        cache: false,
        success: function (result) {
            myFunction(result);
            chart.render();
            console.log(result);
        }
    });
    

    有关模型绑定及其工作原理的详细信息,请查看此文档:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-5.0#collections

    测试结果

    【讨论】:

    • 非常感谢。你的建议就像一个魅力。请再问一个问题,我可能需要将更多不同的参数传递给控制器​​,使用 POST 方法并通过HttpContext.Request.Form[key] 解析参数对我来说更好吗?
    • 如果您想向控制器传递更多更大的数据,是的,您可以使用您的数据向端点发出 HTTP Post 请求。
    猜你喜欢
    • 2018-10-08
    • 2022-01-23
    • 2021-05-24
    • 2020-11-13
    • 2019-06-10
    • 2018-03-17
    • 1970-01-01
    • 2020-04-06
    • 2018-03-30
    相关资源
    最近更新 更多