Asp.net mvc ASP.NET MVC(4)-防止调用IValidatableObject。验证属性

Asp.net mvc ASP.NET MVC(4)-防止调用IValidatableObject。验证属性,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-2,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 2,Asp.net Mvc 4,如何防止对属性调用IValidatableObject.Validate,并仅对顶级模型调用它 public abstract class Foo, IValidatableObject { public virtual Foo Related { get; set; } public virtual IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {

如何防止对属性调用
IValidatableObject.Validate
,并仅对顶级模型调用它

public abstract class Foo, IValidatableObject
{
    public virtual Foo Related { get; set; }

    public virtual IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        // This is first called for the 'Related' property 
        // and then for the model itself
        // I want this to be called for the top level model only
    }
}
公共抽象类Foo,IValidatableObject
{
公共虚拟对象相关{get;set;}
公共虚拟IEnumerable验证(ValidationContext ValidationContext)
{
//这首先是为“相关”属性调用的
//然后是模型本身
//我想这是被称为顶级模型只
}
}

我不确定是否有更优雅的方法,但是创建一个覆盖Foo的Validate方法的新类怎么样

比如:


public class FooNoValidation : Foo
{
    public override IEnumerable Validate(ValidationContext validationContext)
    {
        yield break;
    }
}
当然,这需要Foo上的Validate方法是虚拟的,并且您需要在Foo父类上引用foonvalidation,但可能会起作用

我知道这有点麻烦,但如果你只需要让它工作,这应该让它发生