我有以下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对象如何被序列化有关?
答案 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) { … }
不确定,但我认为尝试将您的参数分为两个参数已经搞砸了