将Json传递给MVC控制器时出现500内部服务器错误

时间:2016-04-27 04:45:56

标签: json asp.net-mvc asp.net-mvc-5

我想将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值到控制器。有人能告诉我什么是错的吗?提前谢谢。

1 个答案:

答案 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}'