在Javascript数组中有一些项,但当我将数组传递给MVC控制器时,列表/数组为空

在Javascript数组中有一些项,但当我将数组传递给MVC控制器时,列表/数组为空,javascript,jquery,arrays,asp.net-mvc,Javascript,Jquery,Arrays,Asp.net Mvc,我使用的是ajax POST方法 将存储在数组中的对象发送到Mvc控制器以将其保存到数据库,但我的控制器中的列表始终为空 而在Javascript中,数组中有项目 这是我使用控制台.Log的代码。 我的控制器称为ProductController,ActionMethod称为Print,所以我写了: “产品/打印” Console.Log显示了以下内容: 所以有3个项目 var print = function () { console.log(productList);

我使用的是ajax POST方法 将存储在数组中的对象发送到Mvc控制器以将其保存到数据库,但我的控制器中的列表始终为空 而在Javascript中,数组中有项目

这是我使用控制台.Log的代码。 我的控制器称为
ProductController
ActionMethod
称为
Print
,所以我写了: “
产品/打印

Console.Log
显示了以下内容:

所以有3个项目

 var print = function () {
        console.log(productList);
        $.ajax({ 
            type: "POST",
            url: "Product/Print",
            traditional: true,
            data: { productList: JSON.stringify(productList) }
    });}
当我的控制器中的方法被调用时,列表为空,如图所示:

我不知道发生了什么,我想弄清楚,但有点难,因为我觉得一切都很好, 我是javascript新手,所以这可能不是最好的方法

谢谢各位


Cheers

通过ajax发送复杂数据时,需要发送json字符串化版本的js对象,同时将
contentType
指定为“application/json”。使用
内容类型
标题,模型绑定器将能够从正确的位置(在本例中为请求正文)读取数据并映射到您的参数

此外,您不需要在数据中指定参数名称(这将创建一个json字符串,如
productList=yourArraySuff
,model binder将无法将其反序列化为您的参数类型)。只需发送阵列的字符串化版本

这应该行得通

var productList = [{ code: 'abc' }, { code: 'def' }];
var url = "Product/Print";
$.ajax({
    type: "POST",
    url: url,
    contentType:"application/json",
    data: JSON.stringify(productList)
}).done(function(res) {
    console.log('result from the call ',res);
}).fail(function(x, a, e) {
    alert(e);
});
如果您的js代码在razor视图中,那么您还可以利用
Url.Action
helper方法来生成操作方法的正确相对Url

var url =  "@Url.Action("Print","Product)";

需要是
data:JSON.stringify({productList:productList})
您正在传递字符串,并希望它是产品列表的列表。@StephenMuecke列表现在为空。您还需要设置
contentType:'application/json'
您不需要,但您可以:)