簡體   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