通过ajax发布的数组在c#方法中为空

Posted

技术标签:

【中文标题】通过ajax发布的数组在c#方法中为空【英文标题】:Array post through ajax is null in c# method 【发布时间】:2021-11-28 19:06:12 【问题描述】:

我通过一个循环获取一个数组,并通过一个 ajax 调用将它传递给我的 c# 方法,但由于某种原因,我只在我的参数中获取空值,但数组的计数是通过的。我不确定我做错了什么。例如,在通过 ajax 传递它之前的数组的计数为 3,每个键都填充了所需的信息,但是当我通过 ajax 调用传递它并在 VS 上调试时,我的列表的参数为 null 但有一个计数3 个?

let test = $('.divtest').map(function (index, element) 

    return 
        key1: $(element).closest('.testdiv')[0].id,
        key2: $(element).attr('id'),
        key3: $(element).attr('style')
    
).get();

Ajax 调用

$.ajax(
    cache: false,
    type: "POST",
    data:  test: test,
    dataType: "json",
    url: "/controller/testhere",
    success: function (result) 
      alert('done');
    
);

C#方法

 public JsonResult testhere(List<string> test)
    
       //stuff
        return null;
    

【问题讨论】:

试试url: "/controller/testhere?text="+JSON.stringify(test) 呵呵,请问为什么要尝试这种方法? @Vadim 【参考方案1】:

您的操作是字符串列表,但 ajax 数据不是。试试这个数据

let test = [ "key1", "key2", "key3"];
.....
.ajax(
    cache: false,
    type: "POST",
    data:  test: test,
    dataType: "json",
    url: "/controller/testhere",
    success: function (result) 
      alert('done');
    
);

否则您将不得不更改操作

创建视图模型

public class TestViewModel

public string Key1 get; set;
public string Key2 get; set;
public string Key3 get; set;

动作

public JsonResult testhere(TestViewModel test)

【讨论】:

如果我将测试变量更改为那个值,那么我没有捕获我需要的值?那么将我的操作从列表更改为可以接受我需要的操作不是更好吗? @Jack,好的,我更新了答案,再试一次 我确实对我的操作进行了更改,但传入的值仍然为 null 如果您以 json 格式发布您的 javascript 对象,我会很好。

以上是关于通过ajax发布的数组在c#方法中为空的主要内容,如果未能解决你的问题,请参考以下文章

即使购物车在 WooCommerce 中为空,也可以通过 URL 中的 GET 方法应用优惠券折扣

为啥提交ajax请求时请求随机为空?

通过 jQuery AJAX 将字符串数组传递给 C# WebMethod

参数值在 Ajax 中为空?

Ajax 请求复杂类型在 ApiController 参数中为空

通过 AJAX 阅读后显示视频 blob