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
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).
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.
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
- Jeśli strona jest w post Powrót
- Jeżeli po powrotem jest spowodowana przez kontrolę wejściowego CausesValidation nieruchomości ustawiony prawdziwej.
- 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.
- 1. Czy powinienem zawsze wywoływać .ToArray na wyniki zapytania LINQ zwrócone w funkcji?
- 2. Jak działa funkcja Page.IsValid?
- 3. Oprogramowanie pośredniczące powinno zawsze wywoływać następne?
- 4. Czy zawsze powinienem używać statycznych metod fabrycznych zamiast konstruktorów?
- 5. autoconf: czy zawsze powinienem używać AS_IF ponad if i m4_if?
- 6. Czy powinienem zawsze używać pętli do gier w grze Silverlight?
- 7. Czy powinienem zawsze owijać mój kod w try ... catch blocks?
- 8. Czy powinienem używać na zawsze/pm2 w kontenerze (Docker)?
- 9. Jak często powinienem wywoływać srand() w aplikacji C++?
- 10. Czy muszę wielokrotnie wywoływać Crashlytics.start?
- 11. Czy powinienem zutylizować Mutex?
- 12. Czy repozytorium powinno wywoływać inne repozytorium? Czy repozytorium może wywoływać warstwę usługi?
- 13. Czy powinienem wywoływać implementację klasy podstawowej podczas przesłonięcia metody w języku C# dla ASP.NET?
- 14. Czy muszę jawnie wywoływać podstawowy wirtualny destruktor?
- 15. C++ Czy poprawnie wywoływać "atrybuty" członków klasy?
- 16. Czy można asynchronicznie wywoływać cmdlets programu PowerLink?
- 17. Czy URLForUbiquityContainerIdentifier: należy wywoływać w wątku poza głównym wątkiem?
- 18. Czy MutationRecord.oldValue coś powinienem użyć?
- 19. Czy powinienem odkażać przecenę?
- 20. Czy powinienem ozdobić funkcję?
- 21. Czy podklasy powinny wywoływać inicjatory w bezpośredniej super klasie?
- 22. Dlaczego zawsze powinienem zrobić wyjątek [możliwy do serializacji]? (NET)
- 23. Z czym zawsze powinienem analizować datę? DateTime, Time, Time.zone?
- 24. Czy powinienem sprawdzić, czy obiekt jest pusty pierwszy czy drugi?
- 25. Czy muszę wywoływać wycofywanie, jeśli nigdy nie zatwierdzam?
- 26. Czy powinienem zatelefonować Zatrzymać przed odczytaniem ElapsedMilliseconds?
- 27. Kryształy filtrowane SQL: czy zawsze powinienem wstawić filtr do indeksu dla kolumn opcjonalnych?
- 28. Czy zawsze powinienem używać akcesorów dla zmiennych instancji w Objective-C?
- 29. Czy powinienem zawsze poruszać się na argumentach konstruktora lub ustawiającego `sink`?
- 30. Czy powinienem okresowo aktualizować GeoLiteCity.dat?
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. –
Po prostu chciałem się upewnić, że nie tracę rozumu. LOL. – mkelley33
Właśnie zredagowałem mój post, aby dodać trochę dodatkowych informacji. Dzięki za głosowanie/akceptację. :-) – Cerebrus