MC, 15:07 piątek, 02.03.2012 r.
Ilustracja do artykułu: ASP.NET - Włączanie, wyłączanie i dokonywanie walidacji przez javascript

ASP.NET - Włączanie, wyłączanie i dokonywanie walidacji przez javascript

Walidacja to niestety moja zmora, tym bardziej, że jest niezbędnym elementem praktycznie każdej aplikacji i nijak przed nią uciec. Mimo, że technologia ASP.NET wychodzi na przeciw wymaganiom programistów podając narzędzia, które maksymalnie ułatwiają proces walidacji, to dla mnie i tak jest to praca przez łzy, bo sytuacjach bardziej skomplikowanych, trzeba się ostro nakombinować, żeby walidatory ze sobą współdziałały. Dziś chciałbym podjąć jeden z tych aspektów walidacji, który mnie osobiście dotyka dość często - włączanie i wyłączanie konkretnych walidatorów z pozycji klienta (przeglądarki internetowej) przy użyciu javascriptu, czyli bez przeładowania strony (postback-ów).

Kiedy możemy chcieć włączać, czy wyłączać walidatory?

Przykładów może być całe mnóstwo, ale ja przytoczę jeden z nich, ten nad którym ostatnio spędziłem trochę czasu. Dajmy na to, że chcemy z pozycji javasctiptu dokonać pewnych operacji na zawartości jakiegoś pola tekstowego. Generalnie sprawa nie jest trudna. Jeżeli jednak, operacja ta ma nie być weryfikowana przez walidator, no to już mamy schodek. Dla przykładu, mamy pole tekstowe, które nie może być puste, czyli nakładamy na nie RequiredFieldValidator, a chcemy od razy po wywołaniu strony chcemy wywołać na tym polu jakiś event, np. typu change(). O ile przy postback-u problemu nie będzie, bo jakąś zawartość pole tekstowe będzie miało, o tyle przy pierwszym wywołaniu z miejsca pole zostanie oznaczone przez walidator, jako błędnie podane, bo wykonaliśmy na nim operację change(), a ono jest puste. To może być problemem, którego najprostszym rozwiązaniem jest wyłączenie na ten czas walidatora, a następnie włączenie go na nowo. Jeśli do kogoś to moje kluczenie nie przemawia (a jak tak czytam, to raczej możliwe ;)), to proszę po prostu zaufać, że takie przypadki istnieją :).

No to do rzeczy...

Żeby aktywować lub dezaktywować działalność walidatora, musimy:
  • pobrać jego Id
  • dostać się do niego jako elementu strony
  • dokonać aktywacji/dezaktywacji

Dobrze, więc jak zdobyć Id naszego walidatora? ASP.NET wszystkim obiektom z runat="server" dynamicznie przypisuje Id, więc wpisanie na sztywno odpada, ale na szczęście każdy obiekt ma swoje pole ClientID i nim przyjdzie nam się posłużyć. To jak mamy Id, to pobierzmy element:

var walidator = document.getElementById("<%= this.naszWalidator.ClientID %>");
Jak widać nic nadzwyczajnego. Kiedy mamy dostęp do naszego walidatora, możemy dokonać właściwiej operacji włączenia lub wyłączenia go. Otóż nasz obiekt będzie miał pole enabled, któremu możemy nadać wartość logiczną. Zatem:
walidator.enabled = false; // wyłączamy walidator
walidator.enabled = true; // włączamy walidator
Prawda, że proste? To jeszcze tylko dla posumowania:
<script type="text/javascript">
var walidator = document.getElementById("<%= this.naszWalidator.ClientID %>");
walidator.enabled = false; // wyłączamy walidator
// jakieś operacje
walidator.enabled = true; // włączamy walidator
<script>

Oczywiście ten sposób jest słuszny dla dowolnego typu walidatorów.

A jak dokonać walidacji w javascript?

Do dokonania walidacji jakiegoś elementu, również potrzebujemy pobrać obiekt walidatora, a następnie wykonać funkcję ValidatorUpdateDisplay(). Przejdźmy od razu do przykładu:
<script type="text/javascript">
var walidator = document.getElementById("<%= this.naszWalidator.ClientID %>");
// jakieś operacje
ValidatorUpdateDisplay(walidator); // dokonujemy walidacji
<script>

Jak widać żadna filozofia, a umiejętność bardzo przydatna.

Warto również wiedzieć w jaki sposób wykonać walidację nie tylko na konkretnym walidatorem, ale na całej stronie. Do tego również mamy przygotowaną funkcję javascript:

Page_ClientValidate("Required");
Page_ClientValidate();
Widzimy, że możemy wywołać funkcję Page_ClientValidate na dwa sposoby. Wersja bez przekazywania argumentu, dotyczy wykonania pełnej walidacji na całej stronie, możemy jednak również przekazać nazwę grupy walidatorów i wtedy sprawdzona zostanie poprawność tylko kontrolek przypisanych do tejże grupy. Warto o tym pamiętać.

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!

Imię:
Treść: