Mam więc aplikację sieci web ASP.NET/VB, w której używam zarówno RequiredFieldValidators, jak i CustomValidators. Jednak mam pewne poważne problemy z całą walidacją. Gdy klikniesz przycisk „Dalej”, aby przejść do następnej strony formularza bez wypełniania wymaganych pól, wszystkie wymagane pola weryfikatorów zostaną uruchomione i pojawią się komunikaty o błędach, ale po chwili nadal przechodzi do następnej strony. Czasami po zmianie tego, co wydaje się być niepowiązanymi częściami kodu, zaczyna działać ponownie i działa przez chwilę, dopóki nie zmienię czegoś innego. CustomValidators są jeszcze bardziej niespójne, czasami działają, czasami uruchamiają się, ale nie uniemożliwiają użytkownikowi przejścia na następną stronę, a czasami w ogóle nie działają, ale zatrzymują/zaczynają działać, gdy zmienię kod, który wydaje się nie mieć wpływu to. Czasami jeden pracuje, a drugi nie. To, co doprowadza mnie do szału, to fakt, że wydaje się to przypadkowe. I nie wydaje mi się, aby dokładnie określić, jakie zmiany w kodzie faktycznie na to wpływają. Czy ktoś ma jakieś pomysły? Czy jest coś, co wpłynęłoby na całą weryfikację na stronie jednocześnie? Oto część mojego kodu, w razie potrzeby mogę również zamieścić część kodu.

Wymagany walidator pola:

<asp:RequiredFieldValidator ID="rfvFirstName" ControlToValidate="txtFirstName" runat="server"SetFocusOnError="true" ErrorMessage="Required"></asp:RequiredFieldValidator>

Walidatory niestandardowe:

<asp:CustomValidator ID="cvRequired" runat="server" ControlToValidate="txtCourseNum" Enabled="true" ErrorMessage=""></asp:CustomValidator>
<asp:CustomValidator ID="cvDuplicate" runat="server" ControlToValidate="txtCoursePrefix" Enabled="true" ErrorMessage=""></asp:CustomValidator>

Następny przycisk:

<asp:Button ID="btnNextA" runat="server" Text="Next" OnClick="btnNext_Click" UseSubmitBehavior="true" CausesValidation="true" />
1
Sara 27 lipiec 2011, 22:55
Czy Twoje niestandardowe walidatory rzeczywiście coś robią? Nie ustawiłeś dla nich funkcji ValidateFunction (serwera lub klienta).
 – 
Rezler
27 lipiec 2011, 23:25
Tak, jest podłączony w kodzie za (zdarzenie ServerValidate)
 – 
Sara
28 lipiec 2011, 00:19

2 odpowiedzi

Najlepsza odpowiedź

Sara, upewnij się, że przyciski, które nie powinny sprawdzać poprawności, mają ustawioną wartość fałszu CausesValidation. Ponadto, jeśli zakończysz wysyłanie z powrotem do weryfikacji, upewnij się, że sprawdziłeś właściwość Page.IsValid, zanim założysz, że rzeczy są prawidłowe. Walidatory zostaną uruchomione przed zdarzeniami ogłaszania zwrotnego. Czy Twój następny przycisk odsyła ponownie — jeśli tak, sprawdź to.

Założę się, że jeśli załadujesz stronę po raz pierwszy i nie wprowadzisz wartości dla wymaganego pola, to nie będziesz mógł przejść do następnej strony. Ale jeśli masz wartość dla wymaganej wartości, zobaczysz uruchomione walidatory, ale przejdziesz do następnej strony. Kod za następnym przyciskiem powinien sprawdzać właściwość Page.IsValid.

Powodem, dla którego walidacja jest myląca, jest to, że niektóre walidatory będą domyślnie występować po stronie klienta (na przykład wymagane walidatory pól), podczas gdy niektóre po stronie serwera (jak niestandardowe walidatory, które mają metody po stronie serwera subskrybowane do ich zdarzeń). Jeśli walidator po stronie klienta zawiedzie, nigdy nie dostaniesz się na serwer. Ponadto, jeśli walidatory po stronie klienta przejdą, walidatory po stronie serwera zostaną uruchomione, ale... i to jest trudna część, twój moduł obsługi post back uruchomi się po uruchomieniu walidatora. Więc jeśli przekierujesz w swoim module obsługi postów zwrotnych (powiedzmy, że post zwrotny został spowodowany kliknięciem przycisku), to nawet jeśli Twój walidator po stronie serwera zawiedzie, zostaniesz przekierowany, więc Twój walidator wydaje się nie działać. Prawdopodobnie zadziałało, ale mogłeś nie sprawdzić właściwości Page.IsValid.

Ponownie ważne jest, aby pamiętać, że kolejność jest:

  • walidacja po stronie klienta,
  • walidacja po stronie serwera,
  • potem twoje wydarzenie zwrotne

Nie przeklinałbym stosu Biblii (ponieważ nie mam stosu Biblii), ale to, co postrzegasz jako niespójne zachowanie, może równie dobrze polegać na tym, że nie wykonujesz rzeczy w tej samej kolejności. Jeśli nie umieścisz niczego w wymaganych polach, nigdy nie powinieneś wysyłać z powrotem. Jeśli umieścisz coś w wymaganych polach, a jeden z walidatorów po stronie serwera zawiedzie, odeślesz wiadomość, ale jeśli nie przetestujesz pod kątem Page.IsValid, będzie to wyglądać tak, jakby walidator nie działał. programy obsługi zdarzeń.

4
ek_ny 28 lipiec 2011, 16:29
Jak wspomniał ek_ny, upewnij się, że sprawdziłeś if (Page.IsValid) przed przejściem do następnej strony.
 – 
jdmonty
28 lipiec 2011, 04:32
Dzięki, sprawdzenie Page.IsValid zadziałało dla wymaganych walidatorów pól i jednego z niestandardowych walidatorów. Nadal mam problem z jednym z niestandardowych walidatorów, ale myślę, że to niepowiązany problem i jeśli nie będę w stanie go rozgryźć, prawdopodobnie wyślę osobne pytanie na ten temat. Dzięki za pomoc!
 – 
Sara
29 lipiec 2011, 05:44

Przede wszystkim umieść grupę walidacyjną na walidatorach i przycisku. Jeśli to też nie zadziała, umieść OnClientClick='CheckValidate();' i zadeklaruj funkcję, która wywoła metodę page_clientvalidate wraz z parametrem grupa walidacji. To z pewnością zadziała. Jeśli to nie działa, wstaw debuger do metody javascript i debuguj to samo

0
Ankit 27 lipiec 2011, 23:45
Tak. Użyj również firebuga i sprawdź, czy występują błędy js.
 – 
Rezler
28 lipiec 2011, 20:52