如何从ajax将多个json数组传递给控制器?
Posted
技术标签:
【中文标题】如何从ajax将多个json数组传递给控制器?【英文标题】:How to pass multiple json array to controller from ajax? 【发布时间】:2020-12-05 17:08:55 【问题描述】:我有两个 json 数组。我正在尝试将这些 json 数组发送到我的控制器。当我想发送其中一个时,一切都很好,但我无法发送第二个。我该如何解决?
视图发布功能
function HobiIlgiAlanKaydetGuncelle()
var hobiler = $('#Hobiler').val(); // Json array of object
var ilgiAlanlar = $('#IlgiAlan').val();
$.ajax(
url: "/Kullanici/HobiVeIlgiAlanlariniKaydetGuncelle",
type: "POST",
contentType: 'application/json; charset=UTF-8',
dataType: 'json',
data: hobiler : hobiler,ilgiAlanlar : ilgiAlanlar,
success: function (response)
);
控制器
[HttpPost]
public async Task<JsonResult> HobiVeIlgiAlanlariniKaydetGuncelle([FromBody] List<HobilerVM> hobiler, List<IlgiAlanlarVM> ilgiAlanlar)
//When I put second parameter, both of them comes with null
HobilerVM
public class HobilerVM
public int id get; set;
public string value get; set;
IlgiAlanVM
public class IlgiAlanVM
public int id get; set;
public string value get; set;
【问题讨论】:
这能回答你的问题吗? MVC3 & JSON.stringify() ModelBinding returns null modelJSON.stringify(hobiler : hobiler,ilgiAlanlar : ilgiAlanlar)
应该这样做...
我认为这对您的问题很有用:***.com/questions/14407458/…
参数已经被 tagify 库字符串化。当我只发送 hobiler 时,我可以不使用 stringify 发送。
@Trinity:你使用的是哪个版本的 MVC?
【参考方案1】:
问题在于以下行:
data: hobiler : hobiler,ilgiAlanlar : ilgiAlanlar
这是 javascript 中的一个对象。 c#中的等价物应该是:
public class MyData
public List<HobilerVM> hobiler;
public List<IlgiAlanlarVM> ilgiAlanlar;
然后在你的控制器中:
[HttpPost]
public async Task<JsonResult> HobiVeIlgiAlanlariniKaydetGuncelle([FromBody] MyData data)
//When i put second parameter, both of them comes with null
欲了解更多信息,请查看Why does ASP.NET Web API allow only one parameter for POST method?
【讨论】:
我做了你的,但仍然带有 null。 在将 JSON 指定为 contentType 时也不发送 JSON 你是什么意思? 是所有数据对象为空还是只是第二个属性? 当我输入第二个参数时,所有数据对象都带有 null。但是当我发送单个参数(例如 hobiler)时没有问题。【参考方案2】:Web API 不允许您在 Web API 控制器方法的方法签名——你只能发布一个 Web API 操作方法的单个值。这个值反过来甚至可以 成为一个复杂的对象。可以传递多个值 通过将一个参数映射到实际的 POST 或 PUT 操作 内容和其余的通过查询字符串。参考:How to pass multiple parameters to Web API controller methods 和 How WebAPI does Parameter Binding
解决方案
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
编码愉快,干杯!
【讨论】:
仍然带有null。 数据:hobiler : hobiler,ilgiAlanlar : ilgiAlanlar 将其更改为数据:hobiler : JSON.stringify(hobiler),ilgiAlanlar : JSON.stringify(ilgiAlanlar)【参考方案3】:我试过你的代码,除了某些东西之外,它对我来说很好。
首先,您的第二个参数与您在代码中发布的内容具有不同的 ViewModel:
public class IlgiAlanVM
public int id get; set;
public string value get; set;
但在您的参数上,您使用的是不同的 ViewModel:
([FromBody] List<HobilerVM> hobiler, List<IlgiAlanlarVM> ilgiAlanlar)
正如您在此处看到的,IlgiAlanVM
与 List<IlgiAlanlarVM>
不同
其次,我只是使用了相同的代码,但没有[FromBody]
。那就是:
//I already edited your List of Model here on the second parameter from IlgiAlanVM to IlgiAlanlarVM
[HttpPost]
public async Task<JsonResult> HobiVeIlgiAlanlariniKaydetGuncelle
(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)
);
【讨论】:
以上是关于如何从ajax将多个json数组传递给控制器?的主要内容,如果未能解决你的问题,请参考以下文章
将 KnockoutJS 可观察数组传递给 HTTP Post 控制器方法的 AJax 调用失败
如何将 Struts 2 动作类中的 InputStream 值传递给 JSP 页面中的 Ajax 并将该值转换为 JSON 数组