Sdílet prostřednictvím


ASP.NET MVC – přehled kontrolerů (VB)

Stephen Walther

V tomto kurzu vás Stephen Walther seznámí s ASP.NET kontrolery MVC. Naučíte se vytvářet nové kontrolery a vracet různé typy výsledků akcí.

Tento kurz se zabývá tématem ASP.NET kontrolerů MVC, akcí kontroleru a výsledků akcí. Po dokončení tohoto kurzu pochopíte, jak se kontrolery používají k řízení způsobu, jakým návštěvník komunikuje s webem ASP.NET MVC.

Principy kontrolerů

Kontrolery MVC zodpovídají za reakce na požadavky na web ASP.NET MVC. Každý požadavek prohlížeče se mapuje na konkrétní kontroler. Představte si například, že do adresního řádku prohlížeče zadáte následující adresu URL:

http://localhost/Product/Index/3

V tomto případě je vyvolán kontroler s názvem ProductController. ProductController zodpovídá za vygenerování odpovědi na požadavek prohlížeče. Kontroler může například vrátit určité zobrazení zpět do prohlížeče nebo může přesměrovat uživatele na jiný kontroler.

Výpis 1 obsahuje jednoduchý kontroler s názvem ProductController.

Výpis1 – 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 je vidět na výpisu 1, kontroler je pouze třída (třída jazyka Visual Basic .NET nebo C#). Kontroler je třída, která je odvozena ze základní třídy System.Web.Mvc.Controller. Protože kontroler dědí z této základní třídy, dědí kontroler zdarma několik užitečných metod (tyto metody probereme za chvíli).

Principy akcí kontroleru

Kontroler zveřejňuje akce kontroleru. Akce je metoda na kontroleru, která se volá, když do adresního řádku prohlížeče zadáte konkrétní adresu URL. Představte si například, že vytvoříte požadavek na následující adresu URL:

http://localhost/Product/Index/3

V tomto případě Index() metoda je volána na ProductController třídy. Metoda Index() je příkladem akce kontroleru.

Akce kontroleru musí být veřejná metoda třídy kontroleru. Metody visual Basic.NET jsou ve výchozím nastavení veřejné metody. Uvědomte si, že jakákoli veřejná metoda, kterou přidáte do třídy kontroleru, se automaticky zobrazí jako akce kontroleru (Musíte být opatrní, protože akci kontroleru může vyvolat kdokoli ve vesmíru jednoduše zadáním správné adresy URL do adresního řádku prohlížeče).

Akce kontroleru musí splnit některé další požadavky. Metodu použitou jako akci kontroleru nelze přetížit. Akce kontroleru navíc nemůže být statickou metodou. Kromě toho můžete jako akci kontroleru použít libovolnou metodu.

Vysvětlení výsledků akce

Akce kontroleru vrátí něco, co se nazývá výsledek akce. Výsledek akce je to, co akce kontroleru vrátí v reakci na požadavek prohlížeče.

Architektura ASP.NET MVC podporuje několik typů výsledků akcí, mezi které patří:

  1. ViewResult – představuje KÓD HTML a značky.
  2. EmptyResult – představuje žádný výsledek.
  3. RedirectResult – představuje přesměrování na novou adresu URL.
  4. JsonResult – představuje výsledek javascriptové notace objektu, který lze použít v aplikaci AJAX.
  5. JavaScriptResult – představuje javascriptový skript.
  6. ContentResult – představuje textový výsledek.
  7. FileContentResult – představuje soubor ke stažení (s binárním obsahem).
  8. FilePathResult – představuje soubor ke stažení (s cestou).
  9. FileStreamResult – představuje soubor ke stažení (se streamem souboru).

Všechny tyto výsledky akce dědí ze základní třídy ActionResult.

Ve většině případů vrátí akce kontroleru hodnotu ViewResult. Například akce kontroleru indexu ve výpisu 2 vrátí hodnotu ViewResult.

Výpis 2 – Controllers\BookController.vb

Public Class BookController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return View()
    End Function

End Class

Když akce vrátí Hodnotu ViewResult, vrátí se do prohlížeče kód HTML. Metoda Index() ve výpisu 2 vrátí do prohlížeče zobrazení s názvem Index.

Všimněte si, že akce Index() ve výpisu 2 nevrací hodnotu ViewResult(). Místo toho je volána metoda View() základní třídy Controller. Obvykle nevracíte výsledek akce přímo. Místo toho zavoláte jednu z následujících metod základní třídy Controller:

  1. View – vrátí výsledek akce ViewResult.
  2. Redirect – vrátí výsledek akce RedirectResult.
  3. RedirectToAction – vrátí výsledek akce RedirectToRouteResult.
  4. RedirectToRoute – vrátí výsledek akce RedirectToRouteResult.
  5. Json – vrátí výsledek akce JsonResult.
  6. JavaScriptResult – vrátí hodnotu JavaScriptResult.
  7. Content – vrátí výsledek akce ContentResult.
  8. File – vrátí hodnoty FileContentResult, FilePathResult nebo FileStreamResult v závislosti na parametrech předaných metodě.

Pokud tedy chcete vrátit zobrazení do prohlížeče, zavoláte metodu View(). Pokud chcete přesměrovat uživatele z jedné akce kontroleru na jinou, zavolejte metodu RedirectToAction(). Například akce Details() ve výpisu 3 buď zobrazí zobrazení, nebo přesměruje uživatele na akci Index() v závislosti na tom, jestli má parametr Id hodnotu.

Výpis 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

Výsledek akce ContentResult je zvláštní. Výsledek akce ContentResult můžete použít k vrácení výsledku akce jako prostého textu. Například metoda Index() ve výpisu 4 vrátí zprávu jako prostý text, a ne jako HTML.

Výpis 4 – Controllers\StatusController.vb

Kontroler stavu

System.Web.Mvc.Controller

Public Class StatusController
    Inherits System.Web.Mvc.Controller

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

End Class

Při vyvolání akce StatusController.Index() se zobrazení nevrátí. Místo toho se do prohlížeče vrátí nezpracovaný text "Hello World!".

Pokud akce kontroleru vrátí výsledek, který není výsledkem akce – například datum nebo celé číslo – výsledek se automaticky zabalí do contentResult. Například při akci Index() WorkController ve výpisu 5 je vyvolána datum jako ContentResult automaticky.

Výpis 5 – WorkController.vb

Public Class WorkController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return DateTime.Now
    End Function

End Class

Akce Index() ve výpisu 5 vrátí objekt DateTime. Rozhraní ASP.NET MVC převede objekt DateTime na řetězec a automaticky zabalí hodnotu DateTime v ContentResult. Prohlížeč obdrží datum a čas jako prostý text.

Souhrn

Účelem tohoto kurzu bylo seznámit vás s koncepty ASP.NET kontrolerů MVC, akcí kontroleru a výsledků akcí kontroleru. V první části jste zjistili, jak přidat nové kontrolery do projektu ASP.NET MVC. Dále jste zjistili, jak jsou veřejné metody kontroleru vystaveny vesmíru jako akce kontroleru. Nakonec jsme probrali různé typy výsledků akce, které se dají vrátit z akce kontroleru. Konkrétně jsme probrali, jak z akce kontroleru vrátit hodnoty ViewResult, RedirectToActionResult a ContentResult.