【问题标题】:Json array is null when received in controller在控制器中接收到 Json 数组时为空
【发布时间】:2016-06-18 07:43:23
【问题描述】:
function viewReports(firstDate, lastDate) {
    var selected = $('#ReportSelected').find(":selected");
    var controller = "PortalReports";
    var method = "GetReport";

    var urlAjax = $("#basePath").val() + controller + "/" + method;
    var companydropdown = $('#ReportSelected :selected').data("companydropdown");
    var agencydropdown = $('#ReportSelected :selected').data("agencydropdown");
    var userdropdown = $('#ReportSelected :selected').data("userdropdown");

    var data = 
        {
            reportSelected: selected.text(),
            firstDate: firstDate,
            lastDate: lastDate,
            companydropdown: companydropdown,
            agencydropdown: agencydropdown,
            userdropdown: userdropdown
        };
    /*var data =
        [{
            "reportSelected": selected.text(),
            "firstDate": firstDate,
            "lastDate": lastDate,
            "companydropdown": companydropdown,
            "agencydropdown": agencydropdown,
            "userdropdown": userdropdown
        }];*/

    var answer = JSON.stringify({ data });

    $.ajax({
        traditional: true,
        data: JSON.stringify({ data }),
        url: urlAjax,

        success: function (response) {
            loadReport(response);
        },
        error: function (ob, errStr) {
            alert("An error occured. Please try again.");
        }
    });

//Mvc
     public JsonResult GetReport(JArray data)
            {
           var persons = data.Select(x => x.ToObject<InputJson>());  

JArray 数据始终为空,无论我添加方括号、删除引号等有多少种方式,我做错了什么!!! 为了便于阅读,我更喜欢以数组形式返回的简单对象,因为我可能需要添加它。

【问题讨论】:

  • 显示JArray 的模型(注意您发送的是对象,而不是数组)。如果它包含属性reportSelectedfirstDate 等,那么如果你使用data: data,它将被正确绑定(没有JSON.stringify()

标签: arrays json asp.net-mvc


【解决方案1】:

由于您要发送复杂的数据结构(数组),因此在进行 ajax 调用时应指定 contentType 属性。指定 contentType 属性的值为"application/json"

//Values hard coded, you may replace with real values from your form.

var dataArray =    [{
                     reportSelected:'201501',
                     firstDate: '11/12/2010',
                     lastDate: '12/12/2010',
                     companydropdown: 4,
                     agencydropdown: 6,
                     userdropdown: 16,
                   }];

var urlAjax = "/Home/GetReport"; // Hard coded for demo. Read further..
$.ajax({
    type: "POST",
    contentType: "application/json",
    data: JSON.stringify(dataArray),
    url: urlAjax,

    success: function (response) {
        console.log(response);
    },
    error: function (ob, errStr) {
        alert("An error occured. Please try again.");
    }
});

我建议您创建一个视图模型 /DTO 来表示您正在发送的数据并在您的操作方法中使用它。

public class ReportRequest
{
    public string reportSelected { get; set; }
    public DateTime firstDate { get; set; }
    public int companydropdown { get; set; }
}

[HttpPost]
public JsonResult GetReport(IEnumerable<ReportRequest> data)
{
   //do something with data 
   // to do : Return something
}

在示例中,我硬编码了 urlAjax 变量的值。您可以考虑使用 html 辅助方法生成正确的操作方法的相对 url 路径,如this post 中所述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    相关资源
    最近更新 更多