異なるコンテキストでビューモデルのバリデーションを行う必要があるシナリオがあります。たとえば、メッセージを投稿する場合は、特定のフィールドが必要ですが、ドラフトを保存するだけの場合は必要ありません。しかし、依然としてドラフトの必須フィールドがあります。したがって、保存しているシナリオに基づいて検証が必要な入力があります。IValidatableObjectを使用したMVCの条件付きバリデーション
私はIValidatableObjectを静的な属性がこれを許可していないと思われるので、柔軟な入力モデルで使用しています。 ValidationContext.Itemsプロパティを使用して、Validateメソッドにデータを渡すオプションがあることがわかります。私は検証でそれを読むことができますが、MVCのソースコードを検索した後、検証するシナリオを設定するためにTryUpdateなどを行う前に実際に設定する方法がないように見えます。
何か不足していますか、私は見ていない別の方法がありますか? IValidatableObjectを実装して、モデル/クラスで
public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
{
ValidationLevel validationLevel;
object validationLevelObject;
if (validationContext.Items.TryGetValue("$" + nameof(ValidationLevel), out validationLevelObject))
{
validationLevel = (ValidationLevel)validationLevelObject;
}
else
{
validationLevel = ValidationLevel.Full;
}
...