5

C#4で名前空間System.ComponentModel.DataAnnotationsを使用して、独自の検証属性を実装しています。これは次のようになります。

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public sealed class MyCustomValidator : ValidationAttribute {
    private String Property1 { get; set; }
    private String Property2 { get; set; }

    public ValeTaxiSituacaoRequired(String property1, String property2) {
        Property1 = property1;
        Property2 = property2;
    }

    public override bool IsValid(object value) {
        //validation logic
    }

}

この属性を以下のように使用したい

[MyCustomValidator("Name", "Job")]
[MyCustomValidator("Name", "Email")]
[MyCustomValidator("Name", "Job")]
public class Employe {
}

問題は、1つの検証のみが実行されることです。(asp.net mvc 2を使用して)すべての検証を実行するにはどうすればよいですか?

4

3 に答える 3

16

TypeId プロパティをオーバーライドする必要があります http://www.paraesthesia.com/archive/2010/03/02/the-importance-of-typeid-in-asp.net-mvc-dataannotations-validation-attributes.aspx

于 2010-11-25T15:06:08.607 に答える
3

独自の属性に AllowMultiple=true を実装する場合は、最初に TypeID をオーバーライドし、次に JQuery の解決策については、こちらのコード プロジェクトの記事を参照してください。

于 2011-08-02T14:05:11.293 に答える
0

FluentValidationを見てください。これにより、検証対象のクラスから検証を分離できるため、サーバーまたはクライアントでいつでも検証ロジックを呼び出すことができます。

これにより、属性で乱雑にすることなく、クラスに任意の複雑さのルールをいくつでも追加できます。

于 2010-07-29T13:24:31.183 に答える