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

0

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?).

Share.

About Author

Programista, trener, prelegent, pasjonat, blogger. Autor podcasta programistycznego: DevTalk.pl. Jeden z liderów Białostockiej Grupy .NET i współorganizator konferencji Programistok. Od 2008 Microsoft MVP w kategorii .NET. Więcej informacji znajdziesz na stronie O autorze. Napisz do mnie ze strony Kontakt. Dodatkowo: Twitter, Facebook, YouTube.

Comments are closed.