16

我已经实现IValidatableObject了好几次,但从未发现解析ValidationContext到 Validate 方法的目的是什么——我的典型IValidatableObject实现如下所示:

 public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
 {
    if (Prop1 == Prop2)
    {
        yield return new ValidationResult(
              "Prop1 and Prop2 must be different.",
              new[] {"Prop1", "Prop2"});
    }
 }

有什么我错过的东西可以用来validationContext做吗?

编辑:我正在使用 ASP.NET MVC,这是在类中实现的——而不是在控制器中。

4

2 回答 2

9

ValidationContext包含IServiceProvider属性。将 DI 容器传递给您的验证属性和验证方法是扩展点。例如,您可以使用它来验证数据库,而无需在模型中设置对 dbcontext 的依赖关系。

于 2013-03-19T12:52:58.170 回答
6

您应该从validationContext 中检索Prop1和。Prop2从你的问题很难说你是在使用 WebForms(所以你有属性的代码绑定)还是 MVC(如果你在控制器中实现它)。

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
 {
    if (validationContext["Prop1"] == validationContext["Prop2"])
    {
        yield return new ValidationResult(
              "Prop1 and Prop2 must be different.",
              new[] {"Prop1", "Prop2"});
    }
 }
于 2013-03-19T12:16:52.033 回答