我想将2个列表字符串json传递给我的控制器并比较更改。
这是我的模特
public class PhongtreeView
{
public Guid Id { get; set; }
public Guid? ParentId { get; set; }
}
我的控制器
public ActionResult SaveChanges(IEnumerable<PhongtreeView> InitTree,IEnumerable<PhongtreeView> UpdatedTree)
{
//Compare changes
return View();
}
我的Ajax代码
$("#SaveChanges").click(function () {
getJson();
$.ajax({
url: '@Url.Action("SaveChanges", "Phong")',
type: "POST",
data: {
JSonFirst: JSON.stringify(StartTreeJson),
JSonFinal: JSON.stringify(UpdatedTreeJson)
},
datatype: "json",
contentType: "application/json",
success: function (data) {
if (!data.error) {
alertify.success(" Success");
//window.location.reload();
}
else {
alertify.error(data.message);
}
}
});
但我总是得到500内部错误。如果我删除 contentType:“application / json”它可以运行但它只传递null值到控制器。有人能告诉我什么是错的吗?提前谢谢。
答案 0 :(得分:0)
您无法直接将2种复杂类型传递给操作方法。要做的方法如下所示:
创建一个类
public class Tree
{
public List<PhongtreeView> InitTree { get; set;}
public List<PhongtreeView> UpdatedTree { get; set;}
}
你的行动方法:
public ActionResult SaveChanges(IEnumerable<Tree> trees)
{
//Compare changes
return View();
}
在Js方面,您需要按如下方式设置数据:
var StartTreeJsonData = [{Id : 1, ParentId : 1},{Id : 2, ParentId : 2}];
var UpdatedTreeJsonData = [{Id : 10, ParentId : 10},{Id : 20, ParentId : 20}];
data: '{InitTree : StartTreeJsonData, UpdatedTree : UpdatedTreeJsonData}'