将复杂Javascript数组发送到ASP.NET控制器方法

Send Complex Javascript Array To ASP.NET Controller Method

本文关键字:ASP NET 控制器 方法 复杂 Javascript 数组      更新时间:2023-09-26

我有一个asp.net mvc6控制器方法,我想发送我的复杂javascript数组数据。我用两种方法用json获取复杂数组。首先,我尝试了如下方法:

 public IActionResult TakeComplexArray(IList<ComplexArrayInfoModel> data) 
 {
     return PartialView(data);
 } 

我尝试的第二种方法。

 public IActionResult TakeComplexArray(ComplexArrayInfoModel[] data) 
 {
     return PartialView(data);
 }

我想发送复杂的javascript数组,如下所示:

[Object, Object, Object, Object, Object]

每个对象的类型都是我的模型类类型ComplexArrayInfoModel。每个对象都有该模型类的不同记录。关于这个复杂阵列的更多细节如下:

[Object, Object, Object, Object, Object]
0: Object
1: Object
2: Object
3: Object
4: Object
length: 5
__proto__: Array[0]

Complex value has data like as below:

0: Object
Name: "aa"
Surname: "bb"
Country: null
City: 5
Age: 20
Gender: null
__proto__: Object
1: Object
Name: "ddd"
Surname: "fff"
Country: null
City: 5
Age: 20
Gender: null
__proto__: Object
2: Object
Name: "zzz"
Surname: "ggg"
Country: null
City: 5
Age: 20
Gender: null
__proto__: Object
3: Object
Name: "www"
Surname: "ccc"
Country: null
City: 5
Age: 20
Gender: null
__proto__: Object
4: Object
Name: "ccc"
Surname: "ddd"
Country: null
City: 5
Age: 20
Gender: null
__proto__: Object
length: 5
__proto__: Array[0]

我想用javascript函数将这些复杂的数据发送到控制器操作,如下所示:

function SendComplexData(data, row) {
   return $.ajax({
        url: '@Url.Action("TakeComplexArray")',
        /*data.complexArray is showed above schema*/
        data: JSON.stringify({ data: data.complexArray }),
        type: 'POST',
        dataType: 'html',
    });
}

我无法发送这个复杂的javascript数组。如何将此复杂数组发送到此控制器操作?同时,当我没有使用json.stringfy方法时,我无法发送数据。

您是否尝试使用Microsoft的MVC.stringify()方法将适当的数据发送到MVC控制器类。您的javascript函数应该如下所示:

function SendComplexData(data, row) {
   return $.ajax({
        url: '@Url.Action("TakeComplexArray")',
        /*data.complexArray is showed above schema*/
        data: MVC.stringify({ data: data.complexArray }),
        type: 'POST',
        dataType: 'html',
    });
}

您的控制器类应该如下所示:

public IActionResult TakeComplexArray(IList<ComplexArrayInfoModel> data) 
{
   return PartialView(data);
} 

您可以尝试使用此ajax代码将复杂数组发送到mvc6控制器的操作方法。

您的$.ajax调用格式不正确,原因是将其配置为发送表单数据和实际发送json数据。要修复的两个选项:

  1. dataType设置为json,并设置正确的contentType

    $.ajax({
     url: '@Url.Action("TakeComplexArray")',
     contentType: "application/json; charset=utf-8",
     data: JSON.stringify({data: data.complexArray}),
     type: 'POST',
     dataType: 'json'
    });
    
  2. 只传递非JSON数据:

    $.ajax({
     url: '@Url.Action("TakeComplexArray")',
     data: {data: data.complexArray},
     type: 'POST',
     dataType: 'html'
    });