0

私はMVCアプリに取り組んでおり、私が書いたモデルコードの一部が次のように展開されています。

public class SomeModel
{
    public int? CodeA { get; set; }
    public int? CodeB { get; set; }

    [RequiredIf("CodeA", 3, ErrorMessage = "(required for [Something]!)")]
    [RequiredIf("CodeB", 99, ErrorMessage = "(required for [Other]!)")]
    public string Foo { get; set; }

    // SNIP: Unimportant details
}

注:RequiredIf()私が使用している実装はここにあります

ユーザーが特定の状況で編集できるプロパティFooを、2つのRequiredIf()属性で装飾しました。記入が必要な場合が2つあります。他のすべての状況では、フロントエンドはユーザーの入力を解析し、舞台裏でユーザーの入力を入力します。

質問:1つのケース(CodeA = 3、CodeB = 4など)のみが満たされ、ユーザーが何も入力しなかったために否定的な検証が発生した場合でも、モデルは無効としてマークされ、ErrorMessageがログに記録されますか?または、Code B条件が満たされているので、CodeAが必要な(入力されていない)状態にある場合に実行される検証をオーバーライドしますか?

別の質問方法:検証は追加的ですか、それとも一度に1つの検証のみの結果に暗黙の制限がありますか?

4

1 に答える 1

1

検証は否定的です。検証に合格するには、すべてのバリデーターがフィールドが有効であることを確認する必要があります。したがってFooCodeAバリデーターが合格し、CodeBバリデーターが失敗した場合、検証は失敗します。Modelstateには、そのフィールドの単一のエラーが含まれます。両方が失敗した場合、modelstateにはそのフィールドの2つのエラーが含まれます。

于 2013-01-15T20:44:31.517 に答える