我的班级
[Serializable]
public class VSpecialQualifiers
{
public VCD LivingStatus { get; set; }
public VCD Relationship { get; set; }
public string OnSetAge { get; set; }
}
我的js功能
$.ajax({
url: url,
type: 'POST',
datatype: 'json',
data: {
'arr' : self.specialQualifiers
}
});
我的serverMethod
[HttpPost]
public JSONResult SaveProblem(object[] arr)
{
//i cant't cast to target type
}
如何将js中的对象数组传递给服务器?
答案 0 :(得分:2)
这不重要,但看起来你在这里使用jQuery,你应该提到。现代浏览器有一个JSON.stringify可以将JavaScript数组转换为可以传递给服务器的JSON字符串。较旧的浏览器没有这个,所以你需要包含一个像这样的JSON库:
然后相同的功能将适用于所有浏览器。
一旦包含,您传递数据的地方传递:
data: JSON.stringify(self.specialQualifiers);
请注意,我不知道self.specialQualifiers
是什么,但它应该解析为数组。您应该在Firefox的Firebug或Chrome / Safari的Web检查器中执行console.log
,以确保这实际上是一个真正的变量。
在你的.net端,你需要一个字符串,然后hava .net库将该字符串转换为一个数组。您不能通过HTTP传递本机对象,只能传递字符串。
答案 1 :(得分:2)
这对我有用(对后端的C#MVC)。
...在js:
var viewModel = new Object();
viewModel.Items = items; // items is a js array of objects
$.ajax({
data: JSON.stringify(viewModel),
type: "POST",
contentType: 'application/json; charset=utf-8',
cache: false,
url: 'CONTROLLERNAME/ACTIONNAME', // replace as necessary here
success: function (data) {
// handle the return value, if any, here
}
});
...在控制器中,这里的签名非常重要:
[HttpPost]
public ActionResult ACTIONNAME(WorksheetVM inputModel) {
...这是一个关联的ViewModel定义,它适用于WorksheetItemVM是viewmodel DTO,其中包含要传递的每个Js对象的字段列表:
public class WorksheetVM {
public WorksheetItemVM[] Items { get; set; }
}