Daily Archives: Kwiecień 14, 2016

Kontroler i Akcje

W tym wpisie przyjrzymy się kontrolerom w aplikacji ASP.NET MVC oraz akcjom, które mogą one zawierać. Kontrolery są odpowiedzialne za odpowiadanie na żądania użytkownika. Każde żądanie kierowane z przeglądarki jest obsługiwane przez określony kontroler. Przykładowo użytkownik klika przycisk odpowiadający za dodanie nowego wydarzenia, natomiast kontroler (EventsController) w odpowiedzi wyświetla odpowiedni widok. Akcja, która się w tym przypadku wykona jest zawarta w metodzie Create typu GET.

Zgodnie z dobrymi praktykami należy pamiętać, że w kontrolerze nie powinno być zawartej logiki biznesowej, ani logiki odpowiedzialnej za dostęp do danych. No dobrze, ale jak to się dzieje że akcje są wykonywane przez odpowiednie metody kontrolera? Za to odpowiedzialny jest routing. Przykładowo wywołujemy URL: http://localhost/Events/Create i w tym przypadku zostanie wywołana metoda Create() z klasy EventsController. Akcje kontrolera muszą być metodami publicznymi. Także każda metoda publiczna w kontrolerze staje się wystawioną na zewnątrz akcją. Każda akcja zwraca typ ActionResult. W przypadku powyższej metody Create zwracany jest typ ViewResult. Wystarczy zwrócić wynik metody View(), a zwrócony zostanie widok o nazwie Create znajdujący się w katalogu Events (czyli o takiej samej nazwie jak kontroler). Identyczny efekt osiągniemy gdy wywołamy metodę View(„Create”), wtedy jawnie wskazujemy nazwę widoku. Poza typem ViewResult w ASP.NET MVC jest dostępnych jeszcze kilka innych typów. Lista wszystkich typów prezentuje się następująco:

  • ViewResult – zwraca widok
  • PartialViewResult – zwraca widok częściowy
  • EmptyResult – zwraca null
  • RedirectResult – przekierowuje do innej akcji za pomocą adresu URL
  • RedirectToRouteResult – przekierowuje do innej akcji bez odwiedzania adresu URL
  • JsonResult – zwraca dane w postaci JSON
  • JavaScriptResult – zwraca kod w postaci JavaScript
  • ContentResult – zwraca wartość tekstową
  • FileContentResult – reprezentuje plik do pobrania, jako tablicę bitów
  • FilePathResult – zwraca ścieżkę do pliku
  • FileStreamResult – reprezentuje plik do pobrania, jako strumień danych

Każdy z typów dziedziczy z klasy bazowej ActionResult. Poniżej znajdują się przykładowe implementacje akcji: