jQuery Ajax 调用 MVC 的数组参数为空

Posted

技术标签:

【中文标题】jQuery Ajax 调用 MVC 的数组参数为空【英文标题】:Array Parameter Empty for jQuery Ajax Call to MVC 【发布时间】:2019-02-20 04:45:02 【问题描述】:

我有一个简单的 MVC api 方法:

[System.Web.Http.HttpPost]  // Important: it is not System.Web.Mvc.HttpPost
public void MyMethod(object[] arr)

    ...

我使用这个 javascript 调用它:

$.ajax(
    url: url,
    method: "POST",
    data:  arr: ['1','2'],
    dataType: "json",
    traditional: true,
    error: function (e) 
        ...
    ,
    success: function (res) 
        ...
    
);

调用成功但C#代码中arr的值为空数组(string[0])。我发现了多个此类调用的示例,主要建议添加传统的:true,但它仍然不起作用。我还尝试提供不同格式的数据,例如:

数据: arr: ['1','2'] 数据: ['1','2'] 数据:['1','2'] JSON.stringify(['1', '2'])

这些都不起作用。想法?

【问题讨论】:

Pass array to mvc Action via AJAX的可能重复 【参考方案1】:

需要指定[FromBody]参数:

[System.Web.Http.HttpPost]  // Important: it is not System.Web.Mvc.HttpPost
public void MyMethod([FromBody] object[] arr)

    ...

你的代码应该是:

$.ajax(
    url: url,
    method: "POST",
    data: ['1','2'],
    dataType: "json",
    traditional: true,
    error: function (e) 
        ...
    ,
    success: function (res) 
        ...
    
);

如果您指定一个键/值,例如Arr: ['1', '2'],那么您应该为您的正文创建一个结构:

class MyMethodPostJson

    public List<string> Arr;

并使用:

[System.Web.Http.HttpPost]  // Important: it is not System.Web.Mvc.HttpPost
public void MyMethod([FromBody] MyMethodPostJson arr)

    ...

【讨论】:

以上是关于jQuery Ajax 调用 MVC 的数组参数为空的主要内容,如果未能解决你的问题,请参考以下文章

jquery Ajax 调用 - 数据参数未传递给 MVC 控制器操作

Jquery Ajax向服务端传递数组参数值

如何使用 Ajax 调用 MVC4 传递两个字符串数组

jquery中通过ajax调用webservice传递数组参数的问题

在 mvc 上使用 ajax 发送文件和文本参数

使用 mvc 视图中的参数从 jquery 调用 web api