ASP.NET MVC(4) - 防止为属性调用IValidatableObject.Validate

时间:2012-05-05 08:04:28

标签: 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)
    {
        // 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
    }
}

1 个答案:

答案 0 :(得分:0)

我不确定是否有更优雅的方式,但是如何创建一个覆盖Foo的Validate方法的新类呢?

类似的东西:


public class FooNoValidation : Foo
{
    public override IEnumerable Validate(ValidationContext validationContext)
    {
        yield break;
    }
}

当然这需要Foo上的Validate方法是虚拟的,你需要在Foo父类上引用FooNoValidation,但可能会有效。

我知道它有点像黑客,但如果你只是需要让它发挥作用,这应该会发生这种情况。