#10 Wyszukiwanie danych | Kurs ASP.NET MVC 5

Posted on by 0 comment

W poprzedzającym wpisie zaimplementowaliśmy akcje zgodne z CRUD, czyli Create, Read, Update i Delete. W tym umożliwimy sobie przeszukiwanie naszej bazy danych, kontroler po tym artykule będzie implementował już akcje zgodne z akronimem SCRUD, dodamy do niego jeszcze Search. Naszą bazę danych będziemy początkowo przeszukiwać tylko po jednej cesze samochodu, a później po dwóch cechach, użyjemy do tego celu specjalnie utworzonej publicznej klasy.

Dodanie formularza do widoku

Do widoku akcji Index() dodamy formularz, którym prześlemy nazwę modelu samochodu, który będziemy chcieli wyszukać. Po znaczniku <body> dodajmy następujący kod:

Powyższy fragment, przyczyni się do wygenerowania formularza w przeglądarce, o następującym kodzie XHTML:

Co to oznacza? Po kliknięciu button’a „Szukaj”, wartość znajdująca się w polu textbox, zostanie przesłana sposobem POST, do akcji Index, kontrolera Cars2, która przeszuka bazę danych i zwróci znalezione dane do widoku.

Krotko o GET, POST

Są to dwa sposoby przekazywania danych między stronami z formularza. Wysyłając formularz metodą GET (method=”get”), dane są doklejane do adresu URL, np. www.jakasstrona.pl?imie=Lukasz&wiek=99, każdy może podejrzeć i podmienić z łatwością te dane. Używając natomiast metody POST, ukrywamy dane, których teoretycznie nie da się podmienić, a przesyłaną za pomocą globalnej tablicy. Akcja, kontrolera, która ma przyjmować dane, przesłane za pomocą metody POST, musi być ozdobiona atrybutem:

Akcja, przeznaczona do odbierania atrybutów przesłanych metodą GET, nie musi być przyozdobiona, jednakże zaleca się dla czytelności dodanie:

Odebranie danych z formularza

Wiemy już, jak wysłać dane, możemy w widoku wpisać nazwę modelu samochodu, którą chcemy odnaleźć, jak ją odebrać? Dodajmy następującą metodę do kontrolera Cars2:

W tej chwili mamy w kontrolerze dwie akcje Index, jedna odpowiedzialna jest za żądania z danymi GET, druga z danymi POST. Powyższa akcja odbiera jeden argument string ModelZnajdz, nazwa musi być taka sama, jak nazwa odpowiedniego pola w formularzu. W metodzie użyto zapytania LINQ, mam nadzieje, że chociaż intuicyjnie, każdy jest to w stanie zrozumieć. Warto dodać, że obie akcje Index , są obsługiwane przez jeden widok.

Wyszukanie po wielu polach

Zmodyfikujmy przykład tak, abyśmy mogli wyszukiwać dodatkowo po marce samochodu. W tym celu utwórzmy dodatkową klasę w katalogu Models, klasa musi być publiczna:

Zmodyfikujmy następnie akcję Index, aby przy wywołaniu z nadesłanych parametrów, próbowała utworzyć instancję wcześniej utworzonej klasy.

Na koniec należy zmodyfikować widok Index.cshtml, dodając dodatkowe pole:

Nazwa pola w formularzu musi być zgodna, z tą w pomocniczym modelu. Tworzenie dodatkowych klas, służących do odbierania danych z formularza, jest powszechną i zalecaną praktyką.

Wynik jednego z zapytań dla mojej bazy:

Wynik wyszukiwania - Kurs ASP.NET MVC 5

Wynik wyszukiwania – Kurs ASP.NET MVC 5

Podsumowanie

Dodaliśmy do naszego projektu, możliwość przeszukiwania bazy. Formularz umieściliśmy akurat na widoku Index.cshtml, ale oczywiście, mogliśmy zrobić dodatkową akcję i widok z formularzem dla niej.

Wpis jest cześcią cyklu Kurs ASP.NET MVC 5.

Dodaj komentarz