Asp.net 我应该使用什么来代替DataAnnotations.ValidationAttribute.IsValid作为自定义验证器中的默认返回?

Asp.net 我应该使用什么来代替DataAnnotations.ValidationAttribute.IsValid作为自定义验证器中的默认返回?,asp.net,validation,Asp.net,Validation,问了一个非常类似的问题。我有一个ASP.NET MVC 4应用程序,我想添加一个自定义验证程序。对于IsValid成员,我写了如下内容: protected override ValidationResult IsValid(object value, ValidationContext context) { ValidationResult result = null; // do some checking, possibly setting result if (r

问了一个非常类似的问题。我有一个ASP.NET MVC 4应用程序,我想添加一个自定义验证程序。对于IsValid成员,我写了如下内容:

protected override ValidationResult IsValid(object value, ValidationContext context)
{
    ValidationResult result = null;
    // do some checking, possibly setting result
    if (result == null)
    {
        result = base.IsValid(value, context);
    }

    return result;
}
我的想法是,我看这个值是否通过了我的特定验证规则,如果通过了,我将返回基所说的任何内容。如果我的规则通过,对base.IsValid的调用将抛出NotImplementedException。我不知道为什么。如果我不应该调用base IsValid,我是否应该返回一个ValidationResult.Success


我觉得我遗漏了一些明显的东西。

我阅读了ValdDiationAttribute.IsValid实现的源代码。我认为我看到的行为是故意的。如果我假设设计意图是强制派生的自定义验证器实现它们自己的一个isvalid,并且我想抛出一个包含这方面信息的异常,那么基本实现就会这样做

有一对相当棘手的check/try/finally构造,用于确保覆盖IsValidvalue或IsValidvalue上下文。如果调用了一个基本IsValids未标记,则标记并将参数转发给另一个IsValid。如果一个基IsValids被调用并被标记,那么这是因为另一个基已经被调用,因此没有覆盖,因此,我们没有正确执行,并且发生异常


这对我来说是有道理的。我刚开始的时候没弄明白。返回ValidationResult。您应该返回成功。您不应该尝试返回base.IsValid。好的。

我已经看到了返回Validationresult.Success和null的示例。