实现IValidatableObject时ValidationContext的用途是什么

时间:2013-03-19 12:02:21

标签: c# .net-4.0 ivalidatableobject

我多次实现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,这是在类中实现的 - 而不是在控制器中实现。

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:6)

您应该从validationContext检索Prop1Prop2。从您的问题来看,很难说您是否正在使用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"});
    }
 }