2008-08-13 14 views
10

Gram w środowisku ASP.NET MVC Framework. Jedną rzeczą, która naprawdę mnie myli, jest sposób sprawdzania poprawności opublikowanych danych formularza po stronie serwera. . Przypuszczam, że nie wysyłam z powrotem do tego samego adresu URL, ale jeśli nie, jak ponownie wyświetlić formularz z wprowadzonymi danymi i komunikatami o błędach? Ponadto, gdzie powinna iść logika walidacji? W modelu lub kontrolera? Wydaje się, że jest to jeden z niewielu obszarów, w których formularze sieciowe są znacznie silniejsze (brakuje mi kontroli walidacji).Sprawdzanie poprawności opublikowanych danych formularzy w środowisku ASP.NET MVC

Odpowiedz

2

Czy spojrzałeś na to? http://www.codeplex.com/MvcValidatorToolkit

Cytat ze strony

walidatora Toolkit oferuje zestaw walidatorów dla nowych ram ASP.NET MVC do walidacji formularzy HTML na klient i po stronie serwera z wykorzystaniem zestawy walidacji .

Obawiam się, że ktoś bardziej doświadczony MVC niż ja musiałby porozmawiać z tym, gdzie w architekturze należy umieścić rzeczy.

+0

Rzuciłem okiem na projekt CodePlex, ale nie byłem pod wrażeniem tego, co widziałem (w tym czasie). Może teraz jest lepiej. Przyjrzę się jeszcze raz. Oczywiście Jeff i zespół muszą walidować dane formularzy w StackOverflow. Kiedy patrzę na kod HTML strony [Zadaj pytanie] (http://stackoverflow.com/questions/ask), wygląda na to, że strona odsyła do siebie. Zastanawiam się, w jaki sposób wdrażają walidację. –

0

Po prostu uczę się szkieletu MVC, więc nie jestem pewien, jak daleko to jest, ale z tego co rozumiem, masz formularz w widoku takim jak Edit.aspx. Ten formularz wysłałby następnie do kontrolera inną metodę działania, taką jak Update(), przekazującą zawartość formularza ustawionego w Edit.aspx jako parametry.

Update(int id, string name, string foo) 

Możesz dokonać walidacji w ramach tej metody. Jeśli wszystko jest w porządku,

return View("Item", yourObject) 
12

Oto przegląd przepływu w MVC:

  1. /nowy - renderować „Nowy” widok zawierający formularz, aby użytkownik mógł wypełnić
    • Użytkownik wypełnia formularz i publikuje go/tworzy
    • Post jest kierowany do akcji Utwórz na kontrolerze
    • W swojej metodzie akcji zaktualizuj model za pomocą dane, które zostały opublikowane.
    • Twój model powinien się zatwierdzić.
    • Twój kontroler powinien przeczytać, czy model jest ważny.
    • Jeśli model jest prawidłowy, zapisz go w bazie danych. Przekieruj do/pokaż, aby wyrenderować przedstawienie Zobacz dla twojego obiektu.
    • Jeśli model jest nieprawidłowy, zapisz wartości formularza i komunikaty o błędach w pliku TempData i ponownie przekieruj do akcji Nowa. Wypełnij pola formularza danymi z TempData i wyświetl komunikat (y) o błędzie.

Ramy walidacji pomoże Ci wzdłuż w tym procesie. Ponadto myślę, że zespół ASP.NET MVC planuje ramy sprawdzania poprawności dla następnego podglądu.

+0

Doskonałe podsumowanie! Będzie świetnie z przykładem – Cherian

+0

Dobre podsumowanie! Jedynym problemem, jaki znalazłem, jest to, że chcę mieć możliwość sprawdzenia poprawności typu danych i nie mogę tego zrobić przed przekazaniem danych formularza do modelu, ponieważ będzie on zgłaszał wyjątki podczas jego tworzenia. Czy jest to dobry sposób? – bobwah

+0

TryUpdateModel() pobierze dane twojego formularza i spróbuje umieścić je w twoim obiekcie. Wystarczy użyć FormData jako parametru dla kontrolera, a nie typu obiektu. Inną opcją byłoby zbudowanie niestandardowego spoiwa modelu. Więcej tutaj: http://www.hanselman.com/blog/SplittingDateTimeUnitTestingASPNETMVCCustomModelBinders.aspx –

0

Istnieje moduł Castle.Components.Validator w projekcie Castle. Jest bardzo zwinny i potężny. Generuje reguły sprawdzania poprawności na podstawie atrybutów modelu (lub dowolnego innego źródła), a nawet może generować walidację JS przy użyciu jQuery, Prototype Validation, fValidate i innych. Oczywiście mądry jest abstrakcyjny weryfikator poza interfejsem IValidationEngine.

3

O ile mogę powiedzieć, każdy jest wciąż próbując zrozumieć "standardowy" sposób robienia tego. To powiedziawszy zdecydowanie sprawdź najnowsze posty Phila Haacka i Scotta Guthriego na temat MVC, a znajdziesz tam kilka interesujących informacji o tym, jak oni to zrobili. Kiedy po prostu bawiłem się z tym dla siebie, stworzyłem modelBinder dla klasy danych LinqToSql, którą wygenerowałem. Możesz sprawdzić ten artykuł, aby dowiedzieć się, jak umieścić razem podstawowe ModelBinder:

ASP.Net MVC Model Binder

w swoim działaniu, jeśli stworzył „produkt” ModelBinder byłoby po prostu uznanie skargi tak:

public ActionResult Nowy (produkt prod)

I segregator modelu zajmie się przypisaniem zaksięgowanych danych do właściwości obiektów, o ile i tak go zbudowałeś.

Potem w swoim getValue() metoda można realizować niezależnie od poprawności chcesz, czy przy użyciu wyjątek'S, regex, albo cokolwiek można wykonać połączenie takich jak:

(ModelStateDictionary_name) .AddModelError ("form_element_id", " specified_value "," error_message ");

Następnie można po prostu wrzucić widok <% = Html.ValidationSummary()%>, aby wyświetlić wszystkie błędy.

Do sprawdzania poprawności po stronie klienta użyłem jQuery. Po uzyskaniu podstawowej próbki możesz zacząć robić ciekawe rzeczy, łącząc to wszystko z widokami częściowymi i Ajax.

Powiązane problemy