2011-11-24 46 views
6

我驗證字段在MVC 3數據註釋:是否可以向MVC 3中的StringLength驗證程序提供運行時值?

[StringLength(50, MinimumLength=5)] 
public string MyText { get; set; } 

有沒有提供一個動態值有什麼辦法?像這樣:

[StringLength(50, MinimumLength=GetMinimumLengthValueFromDb())] 
public string MyText { get; set; } 

我最後的手段是使用遠程驗證程序。如果我沒有找到與StringLength這樣做的方法,我將使用RemoteValidator

+1

我想擴展StringLenghtAttribute類,重寫只是構造函數從數據庫檢索默認值。 – BigMike

回答

7

不,只能爲屬性提供編譯時間值,如常量。此限制適用於所有C#屬性,並不特定於數據註釋屬性,但在StringLengthAttribute的情況下意味着可以在運行時提供不同的長度。

您需要使用另一種驗證方式,或者創建一個繼承自StringLengthAttribute的自定義屬性,該屬性接受Type以及該類型的方法名稱作爲長度值的源。這種方法將類似於CustomValidationAttribute所使用的方法,該方法接受ValidatorTypeMethod名稱作爲驗證的來源。

+0

謝謝。我以你描述的方式實現了驗證 - 從StringLengthAttribute繼承並本地化,並添加了從DB中選擇自定義最小長度值的邏輯 –

+0

感謝您指向「CustomValidationAttribute」!我已經完全忘記了這一點:-) – Oliver

+1

@ valerii.sverdlik:是否有可能分享您使用的代碼? – Thijs

相關問題