エディタテンプレートとコンポジションを使用してページを構築しています。私のビューモデルは、それ自身のビューモデルであるプロパティを含んでいます。例えば。親ビューモデルで特定の条件を指定すると、ビューモデル自体のプロパティのデータ注釈検証をオフにします。
public class ParentModel
{
public boolean SomeCheckBox { get; set; }
public ChildModel Child { get; set; }
}
public class ChildModel
{
[Required]
public string SomeString { get; set; }
[Required]
public string SomeOtherString { get; set; }
}
親のSomeCheckBoxプロパティがtrueの場合にのみ、データアノテーションの検証が子プロセスで実行されるようにしたいと思います。
私は、RequiredIfカスタム検証属性がstackoverflowのどこか別の場所にありますが、条件が同じビューモデルの値である場合にのみ機能します。私は、親、または確かに祖先の財産を確認できるものが必要です。
私の一時的なハックは、チェックボックスが真でない場合、ポストバック時のModelStateエラーをクリアすることです。
また、カスタムJavaScriptを作成して、チェックボックスがチェックされていないと、クライアントブラウザが検証を抑制するようにしなければなりませんでした。
実際の例はこれよりもはるかに複雑ですが、うまくいけば上の単純化された例からわかります。いいだろう何
は
public class ParentModel
{
public boolean SomeCheckBox { get; set; }
[SuppressValidationIf("SomeCheckBox", false)]
public ChildModel Child { get; set; }
}
任意のアイデアのようなもので、親ビューモデルの属性のですか?
これは面白そうですね、ダーリンに感謝します。私はFluentValidationを見ていきます。ネット – magritte
ちょっとダーリン、私は今これを試しています - それは実際にはサーバー側でうまくいきますが、.When()条件を含むバリデーターのためにクライアントサイドのJavaScriptを生成しないという点では少しばかりです。彼らはここでもhttp://fluentvalidation.codeplex.com/wikipage?title=mvcに言及しています。 .When()条件をサポートするためにクライアントサイドスクリプトの拡張を書いた人がいれば知っていますか?または、あなたのページにカスタム検証スクリプトを書いていますか? Cheers、Tony – magritte
@TonyLeeper、このようなカスタム検証ロジックのために、私はカスタムのクライアント検証スクリプトを作成します。 –