IValidatableObject中的Validate方法在所有方案下都不会返回ValidationResult

时间:2013-03-20 00:41:05

标签: c# asp.net-mvc-3

我一直在使用Validate方法进行一些我必须要做的条件验证,今天我在做的时候开始考虑我的验证方法。签名是

IEnumerable<ValidationResult> Validate(ValidationContext validationContext);

但是当我实现它时,不会在所有条件下返回Enumerable of Validation结果。

现在我可能会遗漏一些显而易见的东西,但通常编译器会抱怨所有代码路径都没有返回值,但它永远不会为Validate方法做到这一点。

示例实施

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
    if (IsPremiumCandidateSignup && SelectedProductId < 1)
    {
        yield return
            new ValidationResult("Please choose a membership option", 
                                  new List<string> { "SelectedProductId" });
    }
} 

所以在这种情况下它只会在if条件满足时返回。如果有人可以向我解释这一点或者指出一些我可以阅读更多内容的资源,那将非常感激。

1 个答案:

答案 0 :(得分:0)

如果满足以下条件,它将返回一些内容:

if(IsPremiumCandidateSignup && SelectedProductId < 1)

因此,如果它不是高级注册并且没有选择任何产品,它将不会返回任何内容。