【问题标题】:Passing list of integers from AJAX call to C# method returns null将整数列表从 AJAX 调用传递给 C# 方法返回 null
【发布时间】:2021-04-22 14:20:20
【问题描述】:

我正在尝试使用 ajax 将整数数组从客户端 javascript 传递到服务器端 C#。然而,它在代码隐藏中总是以 null 出现。我似乎无法在这里找到问题。我有一个类似的 ajax 方法,但是使用了一个字符串数组,它可以工作,但它不能使用整数?

我的ajax方法:

var theList = [1,2,3,4,5];
$.ajax({ 
    type: 'POST',
    url: 'MyPage?handler=SaveList',
    dataType: 'json',
    contentType:'application/json; charset=utf-8',
    headers: {
        RequestVerificationToken:
           $('input:hidden[name="__RequestVerificationToken"]').val()
    },
    data: JSON.stringify({ theList: theList }),
    success: function(data){
    alert("Success");
    }
});

我的代码隐藏:

public JsonResult OnPostSaveList([FromBody]int[] theList) //<<<Returns 'null'
{
    foreach(int data in theList){
    //save to datebase
    }
    return new JsonResult("Done");
}

这里的问题是我在代码隐藏中从theList 获得了一个空值。 检查 JSON.stringify,它似乎通过了"[1,2,3,4,5]"。不确定这里是否存在类型不匹配。

【问题讨论】:

  • 请通过 Chrome 开发者工具 -> 网络选项卡向我们展示正在传递的确切有效负载。
  • {"dateList":[1609430400000,1609516800000]}
  • 这不像[1,2,3,4,5]
  • 它还有一个不同的名称dateListtheList - C# 将匹配 名称,因此它们需要匹配。
  • 你说得对,它不是。如果我使用JSON.stringify({ theList: theList}),那么payload就变成{"theList":[1609430400000,1609516800000,1609603200000]}如果我使用JSON.stringify(theList),那么它就变成[1609430400000,1609516800000,1609603200000]

标签: javascript c# ajax asp.net-core razor-pages


【解决方案1】:

int32 的最大值为2147483647,而1609430400000 超出范围,因此您收到空值。

您可以使用long[] 代替int[] 来接收值。

var theList = [1609430400000, 1609516800000, 1609603200000];
$.ajax({
    type: 'POST',
    url: 'Index?handler=SaveList',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    headers: {
        RequestVerificationToken:
            $('input:hidden[name="__RequestVerificationToken"]').val()
    },
    data: JSON.stringify(theList),
    success: function (data) {
        alert("Success");
    }
});

处理程序:

    public JsonResult OnPostSaveList([FromBody] long[] theList) //<<<Returns 'null'
    {
        foreach (var data in theList)
        {
            //save to datebase
        }
        return new JsonResult("Done");
    }

请求负载:

结果:

【讨论】:

  • 嗨@mj1313,感谢您的详细回答。在发布我之前的答案后不久,我认为情况就是如此。谢谢你的帮助!对不起,我花了这么长时间才回复。干杯!
猜你喜欢
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-19
  • 2019-03-20
  • 1970-01-01
  • 2021-12-26
相关资源
最近更新 更多