C# 如何从ajax向控制器传递多个json数组?

C# 如何从ajax向控制器传递多个json数组?,c#,jquery,.net,ajax,asp.net-mvc,C#,Jquery,.net,Ajax,Asp.net Mvc,我有两个json数组。我正在尝试将这些json数组发送到我的控制器。当我想发送其中一个时,一切正常,但我无法发送第二个。我怎样才能修好它 从视图发布功能 函数HobiIlgiAlanKaydetGuncelle(){ var hobiler=$('#hobiler').val();//对象的Json数组 var ilgiAlanlar=$('#IlgiAlan').val(); $.ajax({ url:“/Kullanici/Hobivelgialanlianikaydetguncelle”,

我有两个json数组。我正在尝试将这些json数组发送到我的控制器。当我想发送其中一个时,一切正常,但我无法发送第二个。我怎样才能修好它

从视图发布功能

函数HobiIlgiAlanKaydetGuncelle(){
var hobiler=$('#hobiler').val();//对象的Json数组
var ilgiAlanlar=$('#IlgiAlan').val();
$.ajax({
url:“/Kullanici/Hobivelgialanlianikaydetguncelle”,
类型:“POST”,
contentType:'application/json;charset=UTF-8',
数据类型:“json”,

数据:{hobiler:hobiler,ilgiAlanlar:ilgiAlanlar}, 成功:函数(响应){} }); }
控制器

[HttpPost]
公共异步任务hobivelgialanliankikaydeguncelle([FromBody]List hobiler,List ilgiAlanlar)
{
//当我输入第二个参数时,它们都带有null
}
HobilerVM

公共类HobilerVM
{
公共int id{get;set;}
公共字符串值{get;set;}
}
IlgiAlanVM

公共类IlgiAlanVM
{
公共int id{get;set;}
公共字符串值{get;set;}
}

问题在于以下几行:

data: {hobiler : hobiler,ilgiAlanlar : ilgiAlanlar}
这是javascript中的一个对象。c#中的等效值应为:

public class MyData {
    public List<HobilerVM> hobiler;
    public List<IlgiAlanlarVM> ilgiAlanlar;
}
公共类MyData{
公开名单流浪汉;
公共名单;
}
然后在控制器中:

    [HttpPost]
    public async Task<JsonResult> HobiVeIlgiAlanlariniKaydetGuncelle([FromBody] MyData data)
    {
       //When i put second parameter, both of them comes with null    
    }
[HttpPost]
公共异步任务hobivilgialanlarinikaydeguncelle([FromBody]MyData)
{
//当我输入第二个参数时,它们都带有null
}
有关更多信息,请查看

Web API不允许在中传递多个复杂对象 Web API控制器方法的方法签名-您只能发布 Web API操作方法的单个值。这个值甚至可以 这是一个复杂的物体。可以通过on传递多个值 将一个参数映射到实际参数的POST或PUT操作 内容和通过查询字符串的剩余内容。引用:和

解决方案

public class ComplexObject {
   property List<HobilerVM> Hobiler { get; set; }
   property List<IlgiAlanlarVM> IlgiAlanlar { get; set; }
}

[HttpPost]
public async Task<JsonResult> HobiVeIlgiAlanlariniKaydetGuncelle([FromBody] ComplexObject data)
{
 //When i put second parameter, both of them comes with null    
}
公共类ComplexObject{
属性列表Hobiler{get;set;}
属性列表IlgiAlanlar{get;set;}
}
[HttpPost]
公共异步任务hobivilgialanlarinikaydeguncelle([FromBody]ComplexObject数据)
{
//当我输入第二个参数时,它们都带有null
}

快乐,干杯

我试过你的代码,它对我来说很好,除了一些事情

首先,第二个参数的ViewModel与您在代码上发布的内容不同:

public class IlgiAlanVM
{
   public int id { get; set; }
   public string value { get; set; }
}
但在参数上,您使用的是不同的ViewModel:

([FromBody] List<HobilerVM> hobiler, List<IlgiAlanlarVM> ilgiAlanlar)
最后,我要确保它是一个对象数组,以确保它能很好地绑定到您的模型列表中:

        var hobiler = [{
            id: 1,
            value: 'My Value'
        }];
            
        var ilgiAlanlar = [{
            id: 1,
            value: 'MyValue'
        }];

       $.ajax({
            url: '@Url.Action("HobiVeIlgiAlanlariniKaydetGuncelle", "Kullanici")',
            type: "POST",
            contentType: 'application/json; charset=UTF-8',
            dataType: 'json',
            data: JSON.stringify({ hobiler : hobiler, ilgiAlanlar : ilgiAlanlar }),
            success: function (response) { }
        });

这回答了你的问题吗
JSON.stringify({hobiler:hobiler,ilgiAlanlar:ilgiAlanlar})
应该这样做……我认为这对您的问题很有用:参数已经通过tagify库进行了stringify。当我只发送hobiler时,我可以不发送stringify。@Trinity:您使用的是哪个版本的MVC?我使用了您的版本,但仍然带有null。当指定JSON为ContentType时,也不发送JSON。您的意思是什么?所有的数据对象都是null还是仅仅是第二个属性?当我放置第二个参数时,所有的数据对象都带有null。但是当我发送单个参数(如hobiler)时没有问题。仍然带有null.data:{hobiler:hobiler,ilgiAlanlar:ilgiAlanlar}将其更改为数据:{hobiler:JSON.stringify(hobiler),ilgiAlanlar:JSON.stringify(ilgiAlanlar)}
        var hobiler = [{
            id: 1,
            value: 'My Value'
        }];
            
        var ilgiAlanlar = [{
            id: 1,
            value: 'MyValue'
        }];

       $.ajax({
            url: '@Url.Action("HobiVeIlgiAlanlariniKaydetGuncelle", "Kullanici")',
            type: "POST",
            contentType: 'application/json; charset=UTF-8',
            dataType: 'json',
            data: JSON.stringify({ hobiler : hobiler, ilgiAlanlar : ilgiAlanlar }),
            success: function (response) { }
        });