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

时间:2013-09-18 01:32:47

标签: c# entity-framework validation asp.net-mvc-4 data-annotations

使用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; } }
}

在上面的代码中是来自CustomValidation msdn页面示例的extrapodecrapulate尝试: http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.customvalidationattribute(v=vs.95).aspx

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

我试图编写的自引用验证模型类似于MVC4中不可能的代码吗?

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

2 个答案:

答案 0 :(得分:0)

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

Custom model validation of dependent properties using Data Annotations

Property-level validation errors hinder the validation of Class-level validation

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

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

答案 1 :(得分:0)

在您的自定义验证属性中,按如下所示覆盖IsValid方法:

  

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

validationContext包含属性ObjectInstance和ObjectType。第一个是您的实体,第二个是您的实体类型。那应该可以让您访问验证所需要的实体中的任何其他属性(我想-是我自己找到的,因此如果没有,我会通知您。)