Недопустимое модельное состояние с вложенным классом - PullRequest
0 голосов
/ 13 апреля 2019

У меня есть следующий метод 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сериализуется?

1 Ответ

0 голосов
/ 13 апреля 2019

Попробуйте это:

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

Не уверен, но я думаю, что он ошибается, пытаясь разбить ваш параметр на два параметра

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...