Utworzenie własnego atrybutu walidacji danych jest w ASP.NET MVC niezwykle banalne, szczególnie jeśli dziedziczymy z jakiegoś już istniejącego. Dla przykładu takie cacko pozwoli na wprowadzenie jedynie wartości czasu:

  1:  public class TimeSpanFormatAttribute : RegularExpressionAttribute
  2:  {
  3:  	public TimeSpanFormatAttribute()
  4:  		: base(@"^\d{2}:\d{2}:\d{2}$")
  5:  	{
  6:  		this.ErrorMessage = "Expected time in format HH:MM:SS";
  7:  
  8:  	}
  9:  }

Wystarczy zaaplikować w modelu i... już? Niestety nie. Owszem, server-side wszystko śmiga, jednak mi bardzo zależało na sprawdzeniu tego po stronie klienta.

Wraz ze znajomym zagłębiliśmy się każdy w swoją instancję Reflectora z załadowaną dllką MVC i po kilku nieudanych eksperymentach działającą walidację uzyskaliśmy dzięki jednemu prostemu dodatkowemu krokowi:

  1:  DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(TimeSpanFormatAttribute), typeof(RegularExpressionAttributeAdapter));

Taką rejestrację atrybutu umieszczamy w global.asax.Application_Start(), i to wszystko. Dokładnej ścieżki która nas do tego doprowadziła nie potrafię teraz odtworzyć, ale była zamotana i - jeśli bym ją tu umieszczał - prawdopodobnie tak nudna jak ta :).

Niby nic, ale jednak w "MVC 2 In Action" tego nie znalazłem (... a może słabo szukałem?).


Komentarze

dotnetomaniak.pl

26 lipca 2010 07:14

Maciej Aniserowicz | Rejestracja własnych atrybutów walidacji w ASP.NET MVC dla client-side logic

Dziękujemy za publikację - Trackback z dotnetomaniak.pl

Komentarze zamknięte