我通過繼承ValidationAttribute來創建自定義驗證屬性。該屬性應用於我的視圖模型在類級別,因爲它需要驗證多個屬性。無法從MVC2中的自定義驗證屬性設置成員名稱
我重寫
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
並返回:
new ValidationResult("Always Fail", new List<string> { "DateOfBirth" });
在所有情況下,出生日期是在我的視圖模型的屬性之一
。
當我運行我的應用程序時,我可以看到這個打擊。 ModelState.IsValid設置爲false,但當我檢查ModelState內容時,我發現Property DateOfBirth不包含任何錯誤。相反,我有一個空字符串鍵值爲null,並且包含我在我的驗證屬性中指定的字符串的異常。
這會導致在使用ValidationMessageFor時,我的UI中不會顯示任何錯誤消息。如果我使用ValidationSummary,那麼我可以看到錯誤。這是因爲它與一個屬性沒有關聯。
它看起來好像忽略了我在驗證結果中指定了成員名的事實。
這是爲什麼?如何解決?
示例代碼的要求:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class ExampleValidationAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
// note that I will be doing complex validation of multiple properties when complete so this is why it is a class level attribute
return new ValidationResult("Always Fail", new List<string> { "DateOfBirth" });
}
}
[ExampleValidation]
public class ExampleViewModel
{
public string DateOfBirth { get; set; }
}
謝謝。所以MVC團隊正在重新使用ValidationResult類,但完全忽略了其中一個屬性?總的來說,MVC團隊的輸出讓我印象深刻,但這很糟糕。我只是在MVC3/.NET4中檢查過它,它仍然是一樣的。 – 2010-11-24 13:02:45