具有嵌套类的无效模型状态

时间:2019-04-13 00:17:08

标签: c# .net asp.net-mvc asp.net-mvc-5

我有以下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;
}

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

这是成功的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对象如何被序列化有关?

1 个答案:

答案 0 :(得分:0)

尝试一下:

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) { … }

不确定,但我认为尝试将您的参数分为两个参数已经搞砸了