在Javascript数组中有一些项,但当我将数组传递给MVC控制器时,列表/数组为空
我使用的是ajax POST方法 将存储在数组中的对象发送到Mvc控制器以将其保存到数据库,但我的控制器中的列表始终为空 而在Javascript中,数组中有项目 这是我使用控制台.Log的代码。 我的控制器称为在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);
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'
您不需要,但您可以:)