有没有办法覆盖ModelState.IsValid
?阻止ModelState.IsValid验证附加实体吗?
有些要验证的实体只是附属实体,因此除ID之外的所有字段都不会被验证,因为实体处于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
来手动硬编码,我正在寻找更通用和更高效的方法。
为什么你绑定到EF对象,而不是指定的视图模型? – LukLed
我使用POCO实体,所以它没有区别。 – Shimmy
显然它有所不同,因为在专用视图模型中你不会有这个问题。 – LukLed