繁体   English   中英

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

[英]reference an MVC entity model in a custom validation attribute

假设您有一个自定义验证实体模型,则可以使用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页面示例进行了一次额外的减少尝试: http : //msdn.microsoft.com/zh-cn/library/system.componentmodel.dataannotations.customvalidationattribute( v=vs.95) .aspx

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

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

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

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

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

属性级验证错误阻碍了类级验证的验证

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

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

在您的定制Validation Attribute中,重写IsValid方法,如下所示:

受保护的重写ValidationResult IsValid(对象值,ValidationContext validateContext)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM