c# - 具有嵌套类的无效模型状态
问题描述
我有以下 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 对象的序列化方式有关吗?
解决方案
尝试这个:
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) { … }
不确定,但我认为试图将你的参数分成两个参数会搞砸
推荐阅读
- azure-devops - 发布多个项目 - AzureDevOps
- azure - Azure Devops - 启用对 keyvault 的访问
- r - R中的选择性替换字符串
- javascript - 如何在jquery中使用它的id向td添加宽度
- sql - 带有 GROUP BY 的 SQL MIN() 选择其他列
- javascript - 如何在 Discord 中复制 ID 搜索功能?
- python - Keras 对多输入多输出建模:如何确定输入和输出的多或非多场景
- python - 将大型 csv 转换为稀疏矩阵以在 sklearn 中使用
- java - 使用映射对三个字符串数组进行排序
- sql - #SSRS tablix 中的错误,但在 SSRS 的 SQL 端可以