使用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并且很容易丢失业务端。
答案 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。第一个是您的实体,第二个是您的实体类型。那应该可以让您访问验证所需要的实体中的任何其他属性(我想-是我自己找到的,因此如果没有,我会通知您。)