我有一个模型,其中属性 CompanyID 允许空值
public partial class ReportTemplateItem
{
[Key]
public int ReportTemplateItemID { get; set; }
[Required]
public int ReportTemplateID { get; set; }
public int? CompanyID { get; set; }
}
在 DBContext OnModelCreating 中,没有为 CompanyID 声明属性
但是发布时 ModelState 无效。如果我删除 ModelState 验证,表单将按预期工作
接受空值似乎是模型验证的默认行为,我缺少什么?
使用 EF Core 3.0 的 Razor 页面,可空引用类型已禁用
非常感谢
最佳答案
如果这有任何帮助,您可以尝试根本不发送空值(将其从发送的数据中排除)。
例如,不发送以下 json 数据:
var data = {
reportTemplateItemID: 1,
reportTemplateID: 2,
companyID: null
};
仅发送:
var data = {
reportTemplateItemID: 1,
reportTemplateID: 2
};
如果您有一个复杂的对象,您可以在进行 ajax 调用之前轻松去除所有空值:
// let's remove null and undefined values
// an easy way is to serialize using a replacer function and deserialize back
const str = JSON.stringify(data, function(key, value) { return value === null ? undefined : value; });
const newData = JSON.parse(str);
看看它是如何工作的:
var data = { "aaa" : undefined, "bbb": null, ccc : ""}
// newData = "{"ccc":""}"
在这种情况下,ModelState 验证不会失败(只要值类型可为空),至少在 ASP.NET Core 3.1 中(我没有检查其他版本)。
关于c# - ModelState 对于可为 null 的属性无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63037205/