2011-11-18 111 views
4

我創建了一個MVC 3應用程序,需要基於外部數據(例如Required,MinimumLength,MaximumLength)在運行時建立數據驗證規則。在MVC 3中使用數據註釋似乎很自然,但提供驗證元數據的屬性屬性是在編譯時設置的。ASP.Net MVC3,DataAnnotations和動態驗證

是否有一種模式將數據註釋與運行時提供的元數據一起使用?

例子:

public string Text { get; set; } 

public void SetIsRequired(string propertyName, bool required) 
{ 
    // Somehow find the property 'propertyName' and create/remove a RequiredAttribute 
    // on that property 
} 

... 
SetIsRequired("Text", true); 

我所知道的TypeDescriptor,但沒有看到一個選項修改實例的屬性的屬性(實例上唯一的類級屬性,或者屬性級別屬性一種)。

回答

4

它很自然地使用數據註釋在MVC 3

不適合我。由於聲明性質,我從不喜歡數據註釋。以聲明的方式進行驗證會限制功能。我一直喜歡並使用FluentValidation.NET

+0

有趣的選擇。 FluentValidation.NET能否與Entity Framework Code First一起使用? –

+0

@EricJ。,是的,它適用於任何型號。只需安裝'FluentValidation.MVC3' NuGet,在FALSE_Start:'FluentValidationModelValidatorProvider.Configure();'中註冊流利的驗證模型驗證器提供程序,然後您就可以爲模型定義驗證器。 –

+0

酷! FluentValidation.Net是否會生成屬性以提供DataAnnotations提供的相同客戶端驗證? – Buzzer

1

您可以使用IDataErrorInfo接口(MVC可以使用該接口)來編寫自定義的動態驗證規則。