Archiwa tagu: controller

#9.2 Tworzymy nowy kontroler – HomeController

Tworzymy nowy kontroler o nazwie Home (HomeController).

Wiemy już jak stworzyć nowy pusty projekt. Zerknijmy teraz do modułu Solution Explorer i zerknijmy do katalogów Controllers i Views. Widzimy tam, że narazie nie mamy stworzonych żadnych kontrolerów i widoków.

PierwszaAplikacja - Solution Explorer.
Rysunek 9.2.1. PierwszaAplikacja – Solution Explorer.

Po uruchomieniu projektu w takim momencie otrzymamy błąd w przeglądarce (Rysunek 9.2.2).

Visual Studio - pierwsze uruchomienie pustego projektu "PierwszyProjekt".
Rysunek 9.2.2 Visual Studio – pierwsze uruchomienie pustego projektu „PierwszaAplikacja”.

Dlaczego otrzymamy taki błąd? Bo wybraliśmy szablon Empty i jeszcze nic nie dodaliśmy do naszego projektu.

W pierwszej kolejności dodamy kontroler o nazwie Home. W oknie Solution Explorer klikamy PPM na folderze Controllers i z rozwijalnego menu wybieramy opcję Add a później Controller.

Tworzymy nowy kontroler Home.
Rysunek 9.2.3. Tworzymy nowy kontroler Home.

Pojawia się okno z możliwością wyboru typu kontrolera. W naszym przykładzie wybieramy Empty i klikamy na OK.

Wybieramy typ kontrollera Home.
Rysunek 9.2.4. Wybieramy typ kontrolera Home.

Zgodnie z konwencją MVC nazwy kontrolerom nadajemy dodając do nazwy słówko Controller (jak poniżej).

9.2.5. Kontroler Home - nadawanie nazwy.
Rysunek 9.2.5. Kontroler Home – nadawanie nazwy.

W takie prosty sposób stworzyliśmy nasz pierwszy kontroler o nazwie Home i możemy go zobaczyć w oknie Solution Explorer’a w folderze Controllers.

9.2.6. HomeController.
Rysunek 9.2.6. HomeController.

Jeżeli klikniemy na niego w oknie głównym zobaczymy zawartość naszego kontrolera.

9.2.7. Zawartość kontrolera Home.
Rysunek 9.2.7. Zawartość kontrolera Home.

No dobrze, mamy nasz kontroler i co się teraz stanie jak uruchomimy nasz projekt (wciskamy F5)?

9.2.8. Błąd widoku kontrolera.
Rysunek 9.2.8. Błąd widoku kontrolera.

No nie! Znowu błąd?

Błąd występuje dlatego, że nie mamy jeszcze utworzonego widoku, który chcemy wyświetlić. W chwili uruchomienia projektu, uruchamiamy metodę Index z kontrolera Home. Dlaczego? Bo w domyślnej ścieżce rutingu (pamiętamy: plik RouteConfig.cs w folderze App_Start) jest zapis.

 routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

Czyli na początku próbujemy uruchomić metodę Index z kontrolera Home. A ta metoda zawiera metodę View() która zwraca nam odpowiedni widok. Zgodnie z konwencją MVC kompilator szuka widoku o takiej samej nazwie jak nasza metoda akcji, czyli szuka widoku o nazwie Index, a takiego widoku na razie nie ma. Stąd ten błąd. Ale spokojnie w kolejnych częściach kursu utworzymy odpowiedni widok.

Ostatnim działaniem w tym podrozdziale będzie lekka modyfikacja metody Index według poniższego listingu.
Listing 9.3.1 Modyfikacja metody Index w kontrolerze HomeController (zmodyfikowana część jest pogrubiona).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace PierwszaAplikacja.Controllers
{
   public class HomeController : Controller
   {
       // GET: Home
       public ViewResult Index()
       {
           return View();
       }
   }
}

Różnica między użyciem ActionResult na ViewResult zostanie wyjaśnione w dalszej części kursu. Na tą chwilę wyjaśnię tylko tyle, że metoda ViewResult() dziedziczy po metodzie ActionResult().

 

#6 Kontroler

Kontroler (ang. controller)

Kontrolery to nic innego jak klasy C# których zadaniem jest obsługa żądań użytkowników (zwykle dziedziczy po klasie System.Web.Mvc.Controller). Kontroler w pierwszej kolejności odbiera dane wejściowe od użytkownika następnie je przetwarza i analizuje.

Skoro kontroler to klasa, to w „środku” musi mieć jakieś metody. Wewnątrz kontrolera wszystkie metody publiczne nazywamy metodami akcji i to za ich pomoc możemy „sterować” aplikacją. Zgodnie z konwencją MVC, aby ułatwiać sobie życie, wszystkie kontrolery należy umieszczać w katalogu Controllers w naszym projekcie (w oknie Solution Explorer), który jest automatycznie tworzony wraz z naszym nowym projektem. Tak jak w życiu jeśli masz wypracowaną jakąś własną konwencję to możesz ją stosować ale zaleca się stosowanie tej ogólnie przyjętej. Jeśli chodzi o nazywanie kontrolerów to przyjęło się że do nazwy kontrolera dodajemy słówko Controller np. HomeController. Z resztą Visual Studio sam proponuje nam przy tworzeniu kontrolerów używanie właściwej konwencji, co obrazuje poniższy zrzut.

ASP.NET MVC Kontrolery
Obrazek 6.1. ASP.NET MVC Kontrolery (nazewnictwo kontrolerów).

 

Na co wpływa kontroler?
Kontroler wpływa zarówno na model i widok. Po analizie danych wejściowych może on np. zaktualizować model oraz odświeżyć widok. Można powiedzieć, że za pomocą kontrolera możemy kontrolować co się w aplikacji dzieje (za pomocą metod akcji które zawiera kontroler).

Jak tworzymy/dodajemy kontrolery do projektu?
W oknie Solution Explorer klikamy na folderze Controllers prawym przyciskiem myszy (zwanym dalej PPM) i z menu kontekstowego wybieramy opcję Add a następnie z kolejnego menu Controller.

Poniżej przykład kontrolera o nazwie HomeController, który zwraca widok metody Index

    public class HomeController : Controller
    {
        public ViewResult Index()
        {
            return View(); // zwraca widok dla metody Index
        }
    }