C# 如何从ajax向控制器传递多个json数组?
我有两个json数组。我正在尝试将这些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”,
函数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) { }
});