首页 > 解决方案 > 具有嵌套类的无效模型状态

问题描述

我有以下 POST 方法:

public class ModelOuter
{
    public int P1 { get; set; }

    public int P2 { get; set; }
}

[HttpPost]
public JsonResult Test(int i, ModelOuter m)
{
    var result = String.Empty;
    var json = new JsonResult();

    if (this.ModelState.IsValid)
        result = $"good {m.P1} {m.P2}";
    else
        result = "bad";

    json.Data = new { result };

    return json;
}

我想ModelOuter在 POST 数据中传递数据,但我得到一个无效的模型状态。

这是成功的 POST 请求:

params = {
    i: 0,
};

$.ajax({
    url: "@this.Url.Content("~/Event/test")",
    cache: false,
    data: params,
    dataType: "json",
    type: "POST",
    traditional: true,
    success: function (data, textStatus, jqXHR) { },
    error: function (jqXHR, textStatus, errorThrown) { }
});

它返回了这个结果:

{"result":"good 0 0"}

这是不成功的请求:

params = {
    i: 0,
    m: {
        p1: 1,
        p2: 2,
    }
};

$.ajax({
    url: "@this.Url.Content("~/Event/test")",
    cache: false,
    data: params,
    dataType: "json",
    type: "POST",
    traditional: true,
    success: function (data, textStatus, jqXHR) { },
    error: function (jqXHR, textStatus, errorThrown) { }
});

它返回了这个结果:

{"result":"bad"}

头信息(根据Chrome)如下:

i: 0
m: [object Object]

i=0&m=%5Bobject+Object%5D

所以我猜这个问题与嵌套的 JSON 对象的序列化方式有关吗?

标签: c#.netasp.net-mvcasp.net-mvc-5

解决方案


尝试这个:

public class M
{
    public int p1 { get; set; }
    public int p2 { get; set; }
}

public class RootObject
{
    public int i { get; set; }
    public M m { get; set; }
}

public JsonResult Test(RootObject data) { … }

不确定,但我认为试图将你的参数分成两个参数会搞砸


推荐阅读