2011-11-24 9 views
6

mam walidacji pola w MVC 3 z adnotacji danych:Czy jest możliwe podanie wartości runtime walidatora StringLength w MVC 3?

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

Czy istnieje sposób, aby zapewnić tam wartość dynamiczną? Coś takiego:

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

Moja ostatnia metoda polega na użyciu zdalnego weryfikatora. Jeśli nie znajdę sposobu, aby to zrobić z StringLength, użyję RemoteValidator.

+1

Rozszerzałbym klasy StringLenghtAttribute, przesłonięcie tylko konstruktora w celu pobrania wartości domyślnych z db. – BigMike

Odpowiedz

7

Nie, tylko wartości czasu kompilacji, takie jak stałe, mogą być dostarczone dla atrybutów. To ograniczenie dotyczy wszystkich atrybutów C# i nie jest specyficzne dla atrybutów adnotacji danych, ale w przypadku parametru StringLengthAttribute oznacza, że ​​istnieje sposób na zapewnienie innej długości w czasie wykonywania.

Należy użyć innego rodzaju sprawdzania poprawności lub utworzyć niestandardowy atrybut dziedziczący po StringLengthAttribute, który akceptuje Type i nazwę metody na tym typie jako źródło wartości długości. Takie podejście byłoby podobne do metody używanej przez CustomValidationAttribute, która akceptuje nazwę ValidatorType i Method jako źródła walidacji.

+0

Dzięki. Wdrożyłem walidację w sposób opisany przez Ciebie - dziedziczony z StringLengthAttribute i zlokalizował go oraz dodano logikę do wybierania niestandardowej wartości długości min z DB –

+0

Dzięki za wskazanie na 'CustomValidationAttribute'! Całkowicie o tym zapomniałem :-) – Oliver

+1

@ valerii.sverdlik: Czy możliwe jest udostępnienie kodu, którego używałeś? – Thijs

Powiązane problemy