オーバーライドする方法はあります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();
}
}
}
上記の疑似コードで私がやろうとしているのは、検証チェーン内のエンティティをチェックすることです。そのうちの 1 つが として添付されている場合は、Unchanged
検証をスキップしてエラーを削除します。
現在、チェックして手動でハードコーディングする必要がModelState.Key
あります。より一般的で効率的な方法を探しています。