在自定义验证属性中引用 MVC 实体模型

本文关键字:引用 MVC 实体模型 属性 自定义 验证 | 更新日期: 2023-09-27 18:31:37

使用 MVC4,假设您有一个自定义验证实体模型,是否可以将该模型传递给自定义验证属性,例如:

public class ValidatableModel
{
    [CustomValidation(typeof(CustomDependentValidation), "ValidateCDV", **this**)]
    public string Attrib1 { get; set; ]
    public string Attrib2 { get; set; }
}

到声明如下的 CustomDependentValidation 类:

public class CustomDependentValidation : ValidationAttribute
{
    public static ValidationResult ValidateCDV(ValidatedModel argValMod) //yes, ?-able.
    { if (argValMod.Attrib1 == argValMod.Attrib2) { return ValidationResult.Success; } }
}

在上面的代码中,是来自此处的自定义验证 msdn 页面示例的外拆尝试:http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.customvalidationattribute(v=vs.95).aspx

(在Silverlight版本上,我知道...其他版本页面没有任何示例代码)

我尝试编码的自我引用验证模型模式类似的东西在 MVC4 中是不可能的吗?

我想这可能是因为注释不允许对象实例引用或实体模型对象没有任何业务作为客户端,但我仍在学习 MVC 并且很容易失去业务端。

在自定义验证属性中引用 MVC 实体模型

我后来在SO上发现了一些类似的问题解决方法:

使用数据注释对依赖属性进行自定义模型验证

属性级验证

错误妨碍了类级验证的验证

简短的回答似乎是这是不可能的。

答案

大小的答案是:这不在 MVC4 框中,但似乎可以通过足够的工作时间

在自定义验证属性中重写 IsValid 方法,如下所示:

受保护的覆盖 ValidationResult IsValid(对象值,ValidationContext validationContext)

validationContext 包含属性 ObjectInstance 和 ObjectType。第一个是实体,第二个是实体类型。 这应该为您提供对实体中验证所需的任何其他属性的访问权限(我认为 - 只是自己找到的,所以如果没有,我会通知您。