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 {
}

问题是只执行了一次验证。如何执行所有验证(使用 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 的解决方案查看关于代码项目的文章here

于 2011-08-02T14:05:11.293 回答
0

看看FluentValidation。它允许您将验证与正在验证的类分开,以便您可以随时在服务器或客户端上调用验证逻辑。

它允许您向一个类添加尽可能多的任何复杂性的规则,而不会因为属性而杂乱无章。

于 2010-07-29T13:24:31.183 回答