Omówienie kontrolera ASP.NET MVC (VB)

Autor: Stephen Walther

W tym samouczku Stephen Walther przedstawia ASP.NET kontrolerów MVC. Dowiesz się, jak tworzyć nowe kontrolery i zwracać różne typy wyników akcji.

W tym samouczku przedstawiono temat ASP.NET kontrolerów MVC, akcji kontrolera i wyników akcji. Po ukończeniu tego samouczka dowiesz się, jak kontrolery są używane do kontrolowania sposobu interakcji odwiedzających z witryną internetową ASP.NET MVC.

Opis kontrolerów

Kontrolery MVC są odpowiedzialne za odpowiadanie na żądania wysyłane na ASP.NET witrynie internetowej MVC. Każde żądanie przeglądarki jest mapowane na określony kontroler. Załóżmy na przykład, że wprowadzasz następujący adres URL na pasku adresu przeglądarki:

http://localhost/Product/Index/3

W tym przypadku jest wywoływany kontroler o nazwie ProductController. ProductController jest odpowiedzialny za generowanie odpowiedzi na żądanie przeglądarki. Na przykład kontroler może zwrócić określony widok z powrotem do przeglądarki lub kontroler może przekierować użytkownika do innego kontrolera.

Lista 1 zawiera prosty kontroler o nazwie ProductController.

Listing1 — Controllers\ProductController.vb

Public Class ProductController
    Inherits System.Web.Mvc.Controller

    '
    ' GET: /Products/

    Function Index()
        ' Add action logic here
        Return View()
    End Function

End Class

Jak widać na liście 1, kontroler jest tylko klasą (klasą Visual Basic .NET lub C#). Kontroler to klasa, która pochodzi z podstawowej klasy System.Web.Mvc.Controller. Ponieważ kontroler dziedziczy z tej klasy bazowej, kontroler dziedziczy kilka przydatnych metod bezpłatnie (omawiamy te metody za chwilę).

Opis akcji kontrolera

Kontroler uwidacznia akcje kontrolera. Akcja to metoda na kontrolerze, który jest wywoływany po wprowadzeniu określonego adresu URL na pasku adresu przeglądarki. Załóżmy na przykład, że wysyłasz żądanie dla następującego adresu URL:

http://localhost/Product/Index/3

W takim przypadku metoda Index() jest wywoływana w klasie ProductController. Metoda Index() jest przykładem akcji kontrolera.

Akcja kontrolera musi być publiczną metodą klasy kontrolera. Metody Basic.NET wizualne są domyślnie metodami publicznymi. Należy pamiętać, że każda publiczna metoda dodawana do klasy kontrolera jest automatycznie uwidoczniona jako akcja kontrolera (należy zachować ostrożność, ponieważ akcja kontrolera może być wywoływana przez każdego we wszechświecie po prostu przez wpisanie odpowiedniego adresu URL na pasku adresu przeglądarki).

Istnieją pewne dodatkowe wymagania, które muszą zostać spełnione przez akcję kontrolera. Nie można przeciążyć metody używanej jako akcji kontrolera. Ponadto akcja kontrolera nie może być metodą statyczną. Poza tym można użyć tylko dowolnej metody jako akcji kontrolera.

Opis wyników akcji

Akcja kontrolera zwraca coś nazywanego wynikiem akcji. Wynikiem akcji jest to, co akcja kontrolera zwraca w odpowiedzi na żądanie przeglądarki.

Struktura ASP.NET MVC obsługuje kilka typów wyników akcji, w tym:

  1. ViewResult — reprezentuje kod HTML i znaczniki.
  2. EmptyResult — nie reprezentuje wyniku.
  3. RedirectResult — reprezentuje przekierowanie do nowego adresu URL.
  4. JsonResult — reprezentuje wynik notacji obiektów JavaScript, który może być używany w aplikacji AJAX.
  5. JavaScriptResult — reprezentuje skrypt JavaScript.
  6. ContentResult — reprezentuje wynik tekstowy.
  7. FileContentResult — reprezentuje plik do pobrania (z zawartością binarną).
  8. FilePathResult — reprezentuje plik do pobrania (ze ścieżką).
  9. FileStreamResult — reprezentuje plik do pobrania (ze strumieniem plików).

Wszystkie te wyniki akcji dziedziczą z podstawowej klasy ActionResult.

W większości przypadków akcja kontrolera zwraca wartość ViewResult. Na przykład akcja kontrolera indeksu w pozycji Lista 2 zwraca wartość ViewResult.

Lista 2 — Controllers\BookController.vb

Public Class BookController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return View()
    End Function

End Class

Gdy akcja zwraca element ViewResult, kod HTML jest zwracany do przeglądarki. Metoda Index() w pozycji Listing 2 zwraca widok o nazwie Index do przeglądarki.

Zwróć uwagę, że akcja Index() na liście 2 nie zwraca elementu ViewResult(). Zamiast tego wywoływana jest metoda View() klasy bazowej Controller. Zwykle nie zwracasz bezpośrednio wyniku akcji. Zamiast tego należy wywołać jedną z następujących metod klasy bazowej Controller:

  1. View — zwraca wynik akcji ViewResult.
  2. Przekierowanie — zwraca wynik akcji RedirectResult.
  3. RedirectToAction — zwraca wynik akcji RedirectToRouteResult.
  4. RedirectToRoute — zwraca wynik akcji RedirectToRouteResult.
  5. Json — zwraca wynik akcji JsonResult.
  6. JavaScriptResult — zwraca element JavaScriptResult.
  7. Zawartość — zwraca wynik akcji ContentResult.
  8. Plik — zwraca parametr FileContentResult, FilePathResult lub FileStreamResult w zależności od parametrów przekazanych do metody.

Jeśli więc chcesz zwrócić widok do przeglądarki, wywołasz metodę View(). Jeśli chcesz przekierować użytkownika z jednej akcji kontrolera do innej, wywołasz metodę RedirectToAction(). Na przykład akcja Details() w pozycji Lista 3 wyświetla widok lub przekierowuje użytkownika do akcji Index() w zależności od tego, czy parametr Identyfikator ma wartość.

Lista 3 — CustomerController.vb

Public Class CustomerController
    Inherits System.Web.Mvc.Controller

    Function Details(ByVal id As Integer?)
        If Not id.HasValue Then
            Return RedirectToAction("Index")
        End If

        Return View()
    End Function
    Function Index()
        Return View()
    End Function

End Class

Wynik akcji ContentResult jest specjalny. Możesz użyć wyniku akcji ContentResult, aby zwrócić wynik akcji jako zwykły tekst. Na przykład metoda Index() w pozycji Listing 4 zwraca komunikat jako zwykły tekst, a nie jako kod HTML.

Lista 4 — Controllers\StatusController.vb

StatusController

System.Web.Mvc.Controller

Public Class StatusController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return Content("Hello World!")
    End Function

End Class

Po wywołaniu akcji StatusController.Index() widok nie jest zwracany. Zamiast tego do przeglądarki jest zwracany nieprzetworzony tekst "Hello world!".

Jeśli akcja kontrolera zwraca wynik, który nie jest wynikiem akcji — na przykład datą lub liczbą całkowitą — wynik jest opakowany automatycznie w właściwość ContentResult. Na przykład po wywołaniu akcji Index() elementu WorkController na liście 5 data jest zwracana automatycznie jako element ContentResult.

Lista 5 — WorkController.vb

Public Class WorkController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return DateTime.Now
    End Function

End Class

Akcja Index() w pozycji Listing 5 zwraca obiekt DateTime. Struktura ASP.NET MVC konwertuje obiekt DateTime na ciąg i opakowuje wartość DateTime w obiekcie ContentResult automatycznie. Przeglądarka odbiera datę i godzinę jako zwykły tekst.

Podsumowanie

Celem tego samouczka było wprowadzenie do pojęć dotyczących kontrolerów MVC ASP.NET, akcji kontrolera i wyników akcji kontrolera. W pierwszej sekcji przedstawiono sposób dodawania nowych kontrolerów do projektu ASP.NET MVC. Następnie pokazano, jak publiczne metody kontrolera są uwidocznione we wszechświecie jako akcje kontrolera. Na koniec omówiliśmy różne typy wyników akcji, które można zwrócić z akcji kontrolera. W szczególności omówiliśmy sposób zwracania akcji kontrolera ViewResult, RedirectToActionResult i ContentResult.