2009-06-24 17 views
20

Wiem, że nigdy nie ufam wprowadzaniu danych przez użytkownika, ponieważ niepożądane dane mogą w jakiś sposób wpłynąć na integralność aplikacji, czy to przypadkowo, czy celowo; jednak czy istnieje przypadek wywoływania Page.IsValid, nawet jeśli na stronie nie ma żadnych formantów sprawdzania poprawności (ponownie, wiem, że jego złą praktyką jest ufać wprowadzaniu danych przez użytkownika przez pominięcie sprawdzania poprawności)? Czy Page.IsValid wykonuje inne rodzaje sprawdzania poprawności? Spojrzałem na MSDN, a dokumenty wydają się sugerować, że Page.IsValid jest skuteczny tylko wtedy, gdy na stronie istnieją kontrole sprawdzające poprawność lub wywołano metodę Page.Validate. Mój znajomy zasugerował, że zawsze sprawdzam Page.IsValid w obsłudze przycisków click za każdym razem, nawet jeśli nie ma kontroli walidacji lub jawnej strony.Czy powinienem zawsze wywoływać Page.IsValid?

Odpowiedz

20

Byłbym pierwszym, który powie Ci, że "Wszystkie dane wejściowe są złe, dopóki nie udowodniono inaczej" Jednak w tym przypadku, myślę, że twój przyjaciel jest w błędzie, ponieważ dzięki jego logice możemy prawdopodobnie wymyślić setki innych właściwości, które należy sprawdzić lub ustawić, nawet jeśli wartości domyślne są w porządku.

Sprawdzanie Page.IsValid ma sens tylko, jeśli masz scenariusz "Przyczyny rewizji" - przycisk, który przesłał formularz, ma ustawioną właściwość CausesValidation na wartość True. To automatycznie wywołałoby Page.Validate i wszystkie kontrole walidacji należące do tego samego ValidationGroup byłyby sprawdzane pod kątem ważności.

Edit:

Tylko sprawdzone go przy użyciu reflektora i funkcja zawsze zwraca True jeśli strona nie posiada żadnych Walidatorów (ValidatorCollection jest null).

+0

Co więcej, trafiłem na scenariusz drugiego dnia, w którym dostałem żółtą stronę śmierci (YPOD), ponieważ usunąłem kontrolę weryfikatora, wykonałem połączenie zwrotne i otrzymałem błąd, ponieważ kod nie był znajdź wszystkie walidatory, które spowodowały ich zdarzenie sprawdzania poprawności. –

+0

Po prostu chciałem się upewnić, że nie tracę rozumu. LOL. – mkelley33

+0

Właśnie zredagowałem mój post, aby dodać trochę dodatkowych informacji. Dzięki za głosowanie/akceptację. :-) – Cerebrus

2

Nadal możesz chcieć do niego zadzwonić, ponieważ w przyszłości kontrola może być sprawdzana. Wiem, że ten rodzaj wpada w dodawanie funkcjonalności w oparciu o przyszłe wymagania, ale chroni też przed koniecznością sprawdzenia, czy strona jest ważna i nie przechodzi przez wszystkie programy obsługi zdarzeń itp., Aby upewnić się, że jest obecna, jeśli walidator dostanie dodany. Mamy zasadę, że zawsze ją dodajemy, więc nie mamy problemu z brakiem walidacji w przyszłości.

6

można sprawdzić ważność strony, sprawdzając właściwość Page.IsValid, twój cel, aby sprawdzić Page.IsValid może zmieniać się jak

  • Jeśli masz Walidatorów który ma EnableClientScript nieruchomości ustawiony false
  • Jeśli masz sprawdzony walidator po stronie serwera .
  • Przed wykonaniem krytycznej operacji w ciele obsługi zdarzeń odświeżenie jak Zapisz, Usuń, Uwierzytelniaj ...
  • Do/wyświetlać różne rzeczy w zależności od ważności stronie ...
  • Wszelkie o czym można pomyśleć ...

Kiedy i gdzie można zadzwonić na stronę.IsValid

  1. Jeśli strona jest w post Powrót
  2. Jeżeli po powrotem jest spowodowana przez kontrolę wejściowego CausesValidation nieruchomości ustawiony prawdziwej.
  3. Po zakończeniu wywołania do , tj. po zdarzeniu Page.Load.

Możesz sprawdzić Page.IsValid w cyklu życia strony, jeśli wywoływane miejsce/czas spełnia powyższe kryteria; w przeciwnym razie Page.IsValid spowoduje zgłoszenie System.Web.HttpException.

Powinieneś użyć Page.IsValid tam, gdzie ma to sens:; podobnie jak w procedurach obsługi zdarzeń związanych z odświeżaniem wejściowym kontrolek wejściowych (z funkcją CausesValidation = true) i wymaganiem, aby stan strony był prawidłowy, aby poprawnie wykonywać swoje zadanie. (jeśli masz sprawdzane walidatory lub weryfikatory po stronie serwera z wyłączoną walidacją po stronie klienta, staje się to MUST).

protected void btnSave_Click(object sender, EventArgs e) 
    { 
     //Note that there might be ServerSideValidation which evaluated to false. 
     if (!Page.IsValid) 
     return; 

     CurrentEntity.Save(); 
    } 

wreszcie pamiętać, że tylko Page.IsValid sprawdza błędów walidacji w kontroli Walidator na swojej stronie, to wszystko zależy od tego, co robią twoi kontrole Validator.

Powiązane problemy