#9.5.4 Dopisujemy obsługę stworzonego formularza kontaktowego.

9.5.4 Dopisujemy obsługę stworzonego formularza kontaktowego.

W poprzedniej części stworzyliśmy formularz kontaktowy. Sprawdźmy więc czy możemy wpisać do niego jakieś dane i co się stanie jeśli klikniemy w przycisk „wyślij”? Przy otwartym pliku formcontact.cshtml wciskamy F5, wprowadzamy jakieś testowe dane do formularza i klikamy na przycisk „wyślij” (rysunek 9.5.4.1).

Kurs ASP.NET MVC 5. Wypełnienie formularza danymi i potwierdzamy przyciskiem „wyślij”.
Rysunek 9.5.4.1 Wypełnienie formularza danymi i potwierdzamy przyciskiem „wyślij”.

Po zatwierdzeniu wprowadzonych danych, pola formularza się czyszczą. Dlaczego tak się dzieje? Otóż dlatego, że nie dodaliśmy jeszcze obsługi naszego formularza. Kliknięcie w przycisk „wyślij” powoduje powrót do akcji FormContact() w naszym kontrolerze HomeController a ta akcja robi tylko jedną czynność a mianowicie wyświetla formularz FormContact.

W MVC możemy zdublować (przeciążyć) daną metodę akcji i w zależności od żądania (GET czy POST) możemy wykorzystać jedną lub drugą w zależności czy będziemy mieli do czynienia  z żądaniem GET czy z żądaniem POST. Standardowo kiedy korzystamy z metody pomocniczej Html.BeginForm() dane z formularza są przekazywane za pomocą metody POST. Żeby wiadomo było która metoda ma być wykonana przy jakim żądaniu, przed deklaracją danej metody dopisujemy [HttpGet] jeśli mamy do czynienia z żądaniem GET lub [HttpPost] jeśli mamy do czynienia z żądaniem POST. W kodzie powinno to wyglądać jak na rysunku poniżej.

Kurs ASP.NET MVC 5. Tworzenie dwóch metod FormContact dla żądania GET i POST.
Rysunek 9.5.4.2 Tworzenie dwóch metod FormContact dla żądania GET i POST.

Specjalnie na rysunku powyżej dałem dwa listingi z jedną różnicą. Na pierwszym listingu metody dla żądania GET i POST mają takie same nazwy i jedna (dla żądania POST) jest podkreślona. Na drugim listingu nie ma już podkreślenia, ale jest drobna różnica. Na drugim listingu metoda o nazwie FormContact posiada parametr i to właśnie różni obie metody i dlatego można metodę o takiej samej nazwie użyć dwa raz, co nazywamy przeciążeniem metody.

Ale żeby wszysto zadziałało musimy jeszcze dopisać jedną linijkę kodu przy deklaracjach using.

using PierwszaAplikacja.Models;

Dlaczego? Bo dopiero wtedy możemy widzieć i korzystać z naszych modeli (w naszym przypadku MFormContact).

Ale dalej metody dla żądań GET i POST robią to samo bo treści obu metod niczym się nie różnią. Zastanówmy się co ma robić nasza metoda dla żądania POST. Powinna przekazać nasze dane z formularza do widoku ale nie koniecznie domyślnego. Domyślny widok dla metody FormContact to FormContact.cshtml który generuje pusty formularz, dlatego do obsługi naszych danych z formularza wykorzystamy nowy widok o nazwie sendForm, który za chwilę stworzymy. Ale przed tym zmodyfikujemy metodę FormContact dla żądania POST aby przekierowywała nas na ten nowy widok. Poniżej zmodyfikowana metoda FormContact ([HttpPost]).

Kurs ASP.NET MVC. Zmodyfikowana metoda FormContact (HttpPost).
Rysunek 9.5.4.3 Zmodyfikowana metoda FormContact (HttpPost).