2009-10-17 15 views
9

Próbuję prześledzić, dlaczego moje sprawdzanie poprawności ASP.NET MVC 2 nie działa, ale nie mogę znaleźć wystarczająco o tym, JAK to działa, aby móc to zrobić.Jak działa sprawdzanie poprawności w ASP.NET MVC 2?

Podążyłem za tymi krokami w tej useful article by David Hayden, która wydaje się najlepszą obecnie dokumentacją, ale nic się nie dzieje.

Otrzymuję sprawdzanie poprawności, gdy przesyłam do serwera (tak jak robiłem od podglądu 1, gdy dodałem adnotacje danych do mojego modelu), ale nie otrzymuję żadnej walidacji po stronie klienta.

Jak mogę prześledzić, aby przetestować? Do tej pory zweryfikowane następujące oczywiste rzeczy

  • MicrosoftMvcJQueryValidation.js i pliki jquery.validate.min.js są pobierane
  • Html.ClientValidationEnabled = true

cant zobaczyć to, co jest łatwo podłączenie się do wydarzeń, aby wiedzieć, jak to debugować.

Odpowiedz

3

Aby pole było sprawdzane po stronie klienta, należy podać wywołanie funkcji Html.ValidationMessage/Html.ValidationMessageFor <> dla pola (tak jak robił to David w samouczku, który połączono) w widoku. Zasadniczo jest to wyzwalacz do logiki sprawdzania poprawności po stronie klienta, którą chcesz uruchomić sprawdzanie poprawności dla tego pola.

Jeśli istnieją sytuacje, w których nie ma potrzeby, aby komunikat sprawdzający wyglądał wizualnie dla każdego pola (np. Za pomocą Html.ValidationMessage), ale raczej pozwoliłby, aby podsumowanie było jedynym źródłem komunikatów o błędach sprawdzania poprawności (np. za pomocą Html.ValidationSummary), nadal potrzebujesz sposobu "wyzwalania" sprawdzania poprawności dla określonych pól, które chcesz. Można to osiągnąć za pomocą metod Html.Validate/Html.ValidateFor <> w widoku. Tacy pomocnicy nie wyrenderują niczego, ale po prostu zarejestrują określone pole do sprawdzania poprawności po stronie klienta.

Oba te wymagania istnieją, ponieważ może nie chcieć, aby walidacja po stronie klienta automatycznie sprawdzała każdą właściwość obiektu modelu, ponieważ niektóre z nich mogą nawet nie być częścią formularza, który ma być sprawdzany.

10

Oto czego się nauczyłem:

NAJWAŻNIEJSZE

  • formularza HTML musi być tworzone z wykorzystaniem dyrektywą, nie tylko BeginForm i EndForm.
  • Musisz ustawić Html.ClientValidationEnabled = true Przed rozpoczęciem 'form'
  • należy użyć Html.ValidationMessage dla każdego pola
  • Musisz ustawić Html.ClientValidationEnabled = true na każdej kontroli częściowej (ascx)

JAK TO DZIAŁA (bardzo prosty opis)

  • Kiedy robisz HTML.BeginForm tworzy „FormContext” w ViewContext
  • Przy stosowaniu pomocnicy ValidationMessage metadane jest umieścić w kontekście formy
  • Gdy forma jest umieszczona (przy użyciu instrukcji) to pisze się cały kod weryfikacyjny

MISC

  • I nie wydają się uzyskać pracę walidacji kiedy mam częściową kontrolę, jeśli kontrola używa innego modelu z widoku, który określa formy.

  • was nie trzeba używać Html.TextBoxFor lub Html.ValidationMessageFor, można użyć Html.TextBox i Html.ValidationMessage

Powiązane problemy