Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过Ajax将数组传递给MVC操作_C#_Jquery_Asp.net_Ajax_Asp.net Core Mvc - Fatal编程技术网

C# 通过Ajax将数组传递给MVC操作

C# 通过Ajax将数组传递给MVC操作,c#,jquery,asp.net,ajax,asp.net-core-mvc,C#,Jquery,Asp.net,Ajax,Asp.net Core Mvc,我的控制器操作有以下代码 [HttpPost] public async Task<IActionResult> MonthsToAdd(List<string> months) { } [HttpPost] 公共异步任务月数(列表月数) { } 我的ajax代码如下所示 $("#btnSave").on("click", function () { var months= []; var value = $("

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

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

{

}
[HttpPost]
公共异步任务月数(列表月数)
{
}
我的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.");
  }
});
});
$(“#btnSave”)。在(“单击”,函数(){
var月数=[];
var值=$(“输入[名称=月份可用]:选中”).val()
变量长度=$(“输入[value=“+value+”])。最近(“.row”)。索引()
console.log($($)输入[value=“+value+”])。最近(“.row”).index()

对于(var i=0;i更改控制器方法签名以接受
字符串[]
而不是
列表

public async Task MonthsToAdd(字符串[]个月)

javascript发送的是一个数组,而不是.NET类型的
列表

这就是我的工作原理:

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]
}
[HttpPost]
公共异步任务月添加([FromBody]列表月)
{
//添加[FromBody]
}

使用
{'months':months}
传递的对象包含
months
作为属性。但是您的控制器接受
列表
,因此更改为
数据:JSON.stringify(months),
从中传递数组js@user1672994谢谢,我也试过了,还是同样的,这是MVC还是Razor pages应用程序?我添加了相关的标记,所以它是.NET核心MVC而不是Razor pages,我再次更新了标记。我确信我也试过了,让我再试一次。是的,还是一样的
string[]months
没有获取我获取的参数
month-{string[0]
您说的“我获取month-{string[0]”是什么意思。我们正在讨论需要简明答案以避免误解的软件。请更具体一些。哦,很抱歉,当我在
公共异步任务月添加(字符串[]月)中设置断点并将鼠标悬停在
months
上时,我试图向您展示
这就是调试器显示的sorrywoohoo非常感谢,是的,它工作得非常完美!!@kukamuk我真的很高兴能够帮助你!回答得很好!为什么
[FromBody]
属性会有什么不同?我问这个问题是因为我目前正在开发一个大型mvc api和
[FromBody]
不见踪影。@ShaiCohen这是模型绑定器在.net core(我认为是2.0或更高版本)中工作所必需的。可以找到一篇关于这个主题的非常好的文章。“你以前可以在ASP.net 4/MVC 5中这样做。”…我将展示我的恐龙自我。
[HttpPost]
public async Task<IActionResult> MonthsToAdd([FromBody] List<string> months)

{
    // Add [FromBody]
}