有没有办法覆盖ModelState.IsValid
?
一些要验证的实体只是附加的实体,因此除了 ID 之外的所有字段都不会被验证,因为实体处于 state Unchanged
。
有没有办法做到这一点?
有没有人遇到过这个问题?
更新
假设我有以下操作:
[HttpPost]
public ActionResult SaveEntity(MyEntity entity)
{
var isValid = ModelState.IsValid; //false
}
由于模型验证 的所有属性和所有后代属性entity
,因此必须有一种方法来检查这些后代的每个实体,它是否附加到上下文,如果是,则从 中删除错误ModelState
,如下所示:
public ActionResult TryValidateDetachedModel(MyEntity entity, DbContext context)
{
foreach (var ms in ModelState.Where(ms => ms.Value.Errors.Any()).ToArray())
// should iterate over something like GetAllEntityTypesMetadata()
{
var entity = GetEntityFromMetadata(ms);
if (context.Entry(entity).State == EntityState.Unchanged)
{
ms.Value.Errors.Clear();
}
}
}
我在上面的伪代码中尝试做的是检查验证链中的实体,如果其中一个附加为Unchanged
,则跳过验证/删除其错误。
现在我必须通过检查手动进行硬编码ModelState.Key
,我正在寻找一种更通用和更有效的方法。