2011-03-08 27 views
1

如果我下面的IsValid不叫:按预期执行定制验证:当使用重载的方法

public class CustomRangeAttribute : RangeAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     return base.IsValid(value); 
    } 
} 

的方法。 如果我这样做:

protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
{ 
    return base.IsValid(value, validationContext); 
} 

该方法未被调用。为什么? sl3dg3

回答

2

如您使用ASP.NET MVC 3.0,这与您所期望的完全相同。我用自己的例子自己试了一下,它效果很好 - 我得到一个非null的ValidationContext,并且它被调用。请参阅here以获取关于此的完整说明。所以这表明了另一个原因(除了令人敬畏的Razor引擎之外)升级到v3.0。

+0

嗯......我有机会以某种方式检索'ValidationContext',如果我不从'ValidationAttribute'继承? – sl3dg3 2011-03-08 16:34:31

+0

@ sl3dg3,它看起来不像。 'ValidationContext'只有在验证通过'GetValidationResult'方法时才可用。我怀疑MVC不会这样。出于好奇,你想从'ValidationContext'中取出什么数据? – 2011-03-09 15:53:40

+0

我想获得一些关于属性的信息:if(validationContext.ObjectType.IsArray){...}' – sl3dg3 2011-03-09 16:16:34