【问题标题】:Passing array via Ajax to MVC Action通过 Ajax 将数组传递给 MVC Action
【发布时间】:2021-04-14 19:59:36
【问题描述】:

我的控制器操作有以下代码

[HttpPost]
public async Task<IActionResult> MonthsToAdd(List<string> months)

{

}

我的ajax代码如下

$("#btnSave").on("click", function () {
 var months= [];
 var value = $("input[name=monthsAvailable]:checked").val()
 var lengths = $("input[value=" + value + "]").closest(".row").index()
  console.log($("input[value=" + value + "]").closest(".row").index())
  for (var i = 0; i <= lengths; i++) {
     months.push($(".outer .row:eq(" + i + ") input:radio").val())
  }

console.log(JSON.stringify(months));
$.ajax({
  contentType: 'application/json;',
  dataType: 'json',
  type: 'POST',
  url: '/AreaName/Controller/MonthsToAdd',
  data: JSON.stringify({ 'months': months}),
  success: function (response) {
     alert("success.");
  }
});
});

在浏览器控制台中,我看到所有正确的参数,但 MVC 操作没有接收到参数。 array.count shows 0。我在这里错过了什么?

【问题讨论】:

  • 使用{ 'months': months},您将传递一个包含months 作为属性的对象。但是您的控制器接受 List 所以更改为 data: JSON.stringify(months), 以从 js 传递数组
  • @user1672994 谢谢,我也试过了,还是一样
  • 这是 MVC 还是 Razor 页面应用程序?
  • 我已经添加了相关标签
  • 所以它是 .NET core-mvc 而不是 razor-pages,我再次更新了标签

标签: c# jquery asp.net ajax asp.net-core-mvc


【解决方案1】:

这对我来说是有效的:

jQuery ajax 方法:

$.ajax({
   contentType: "application/json; charset=utf-8",
   dataType: 'json',
   type: 'POST',
   url: '@Url.Action("MonthsToAdd")',
   data: JSON.stringify(months),
   success: function (response) {
       alert("success.");
   }
});

控制器动作:

[HttpPost]
public async Task<IActionResult> MonthsToAdd([FromBody] List<string> months)

{
    // Add [FromBody]
}

【讨论】:

  • @kukamuk 很高兴能帮到你!
  • 不错的答案!为什么 [FromBody] 属性会有所不同?我问是因为我目前正在开发一个大型 mvc api,而 [FromBody] 无处可见。
  • @ShaiCohen 这是模型绑定器在 .net 核心(我认为是 2.0 或更高版本)中工作所必需的。关于这个主题的一篇非常好的文章可以在here找到。
  • “以前可以在 ASP.NET 4/MVC 5 中完成。” ...我会展示我的恐龙自我。
【解决方案2】:

更改您的控制器方法签名以接受string[] 而不是List&lt;string&gt;

public async Task<IActionResult> MonthsToAdd(string[] months)

javascript 发送的是 array,而不是 .NET type List&lt;string&gt;

【讨论】:

  • 我确定我也试过了,让我再试一次
  • 是的,它仍然是相同的string[] months 没有得到我得到的参数month - {string[0]
  • “我得到月份 - {string[0]”是什么意思。我们正在讨论需要简洁答案以避免误解的软件。请更具体。
  • 哦,对不起,当我执行断点并将鼠标悬停在 public async Task&lt;IActionResult&gt; MonthsToAdd(string[] months) 中的 months 上时,我试图向您展示,这就是调试器显示的抱歉
猜你喜欢
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 2019-04-13
  • 2011-12-21
  • 1970-01-01
  • 2014-09-27
  • 2020-04-01
  • 1970-01-01
相关资源
最近更新 更多