ASP.NET MVC – přehled kontrolerů (C#)
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 interaguje 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.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
namespace MvcApplication1.Controllers
{
public class ProductController : Controller
{
//
// GET: /Products/
public ActionResult Index()
{
// Add action logic here
return View();
}
}
}
Jak je vidět z výpisu 1, kontroler je jenom třída (třída Visual Basic .NET nebo C#). Kontroler je třída, která je odvozena ze základní System.Web.Mvc.Controller třídy. Vzhledem k tomu, že kontroler dědí z této základní třídy, zdě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 zavolá, 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 jazyka C# jsou ve výchozím nastavení privátní metody. Uvědomte si, že jakákoli veřejná metoda, kterou přidáte do třídy kontroleru, je automaticky vystavena 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).
Existují některé další požadavky, které musí akce kontroleru splnit. Metodu použitou jako akci kontroleru nelze přetížit. Akce kontroleru navíc nemůže být statická metoda. 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ří:
- ViewResult – představuje KÓD HTML a značky.
- EmptyResult – představuje žádný výsledek.
- RedirectResult – představuje přesměrování na novou adresu URL.
- JsonResult – představuje výsledek zápisu objektu JavaScriptu, který lze použít v aplikaci AJAX.
- JavaScriptResult – představuje javascriptový skript.
- ContentResult – představuje textový výsledek.
- FileContentResult – představuje soubor ke stažení (s binárním obsahem).
- FilePathResult – představuje soubor ke stažení (s cestou).
- FileStreamResult – představuje soubor ke stažení (s datovým proudem 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.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
namespace MvcApplication1.Controllers
{
public class BookController : Controller
{
public ActionResult Index()
{
// Add action logic here
return View();
}
}
}
Když akce vrátí ViewResult, vrátí se do prohlížeče html. Metoda Index() v výpisu 2 vrátí zobrazení s názvem Index do prohlížeče.
Všimněte si, že akce Index() ve výpisu 2 nevrací 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:
- View – vrátí výsledek akce ViewResult.
- Redirect – vrátí výsledek akce RedirectResult.
- RedirectToAction – vrátí výsledek akce RedirectToRouteResult.
- RedirectToRoute – vrátí výsledek akce RedirectToRouteResult.
- Json – vrátí výsledek akce JsonResult.
- JavaScriptResult – vrátí hodnotu JavaScriptResult.
- Content – vrátí výsledek akce ContentResult.
- File – vrátí 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 uživatele přesměrovat z jedné akce kontroleru na jinou, zavoláte metodu RedirectToAction(). Například akce Podrobnosti() 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.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class CustomerController : Controller
{
public ActionResult Details(int? id)
{
if (!id.HasValue)
return RedirectToAction("Index");
return View();
}
public ActionResult Index()
{
return View();
}
}
}
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.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class StatusController : Controller
{
public ActionResult Index()
{
return Content("Hello World!");
}
}
}
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, pak se výsledek automaticky zabalí do ContentResult. Například při vyvolání akce Index() WorkController ve výpisu 5 je datum vráceno jako ContentResult automaticky.
Výpis 5 – WorkController.cs
using System;
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class WorkController : Controller
{
public DateTime Index()
{
return DateTime.Now;
}
}
}
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 do 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 se dozvěděli, jak přidat nové kontrolery do projektu ASP.NET MVC. Dále jste se dozvěděli, jak jsou veřejné metody kontroleru vystaveny vesmíru jako akce kontroleru. Nakonec jsme probrali různé typy výsledků akcí, které lze vrátit z akce kontroleru. Konkrétně jsme probrali, jak vrátit viewResult, RedirectToActionResult a ContentResult z akce kontroleru.