Omówienie kontrolera ASP.NET MVC (VB)
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:
- ViewResult — reprezentuje kod HTML i znaczniki.
- EmptyResult — nie reprezentuje wyniku.
- RedirectResult — reprezentuje przekierowanie do nowego adresu URL.
- JsonResult — reprezentuje wynik notacji obiektów JavaScript, który może być używany w aplikacji AJAX.
- JavaScriptResult — reprezentuje skrypt JavaScript.
- ContentResult — reprezentuje wynik tekstowy.
- FileContentResult — reprezentuje plik do pobrania (z zawartością binarną).
- FilePathResult — reprezentuje plik do pobrania (ze ścieżką).
- 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:
- View — zwraca wynik akcji ViewResult.
- Przekierowanie — zwraca wynik akcji RedirectResult.
- RedirectToAction — zwraca wynik akcji RedirectToRouteResult.
- RedirectToRoute — zwraca wynik akcji RedirectToRouteResult.
- Json — zwraca wynik akcji JsonResult.
- JavaScriptResult — zwraca element JavaScriptResult.
- Zawartość — zwraca wynik akcji ContentResult.
- 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.