Přidání nového kontroleru
Poznámka
Aktualizovaná verze tohoto kurzu je k dispozici tady s nejnovější verzí sady Visual Studio. Nový kurz používá ASP.NET Core MVC, který oproti tomuto kurzu poskytuje mnoho vylepšení.
V tomto kurzu se naučíte ASP.NET Core MVC s kontrolery a zobrazeními. Razor Pages je novou alternativou v ASP.NET Core, což je stránkový programovací model, který usnadňuje a zlepšuje produktivitu vytváření webového uživatelského rozhraní. Doporučujeme vyzkoušet kurz Razor Pages před verzí MVC. Kurz k Razor Pages:
- Je jednodušší ho sledovat.
- Zahrnuje další funkce.
- Je upřednostňovaným přístupem pro vývoj nových aplikací.
MVC je zkratka pro model-view-controller. MVC je vzor pro vývoj aplikací, které jsou dobře navrženy, testovatelné a snadno se spravují. Aplikace založené na MVC obsahují:
- M odels: Třídy, které představují data aplikace a které používají logiku ověřování k vynucení obchodních pravidel pro tato data.
- V iews: Soubory šablon, které vaše aplikace používá k dynamickému generování odpovědí HTML.
- C ontrollers: Třídy, které zpracovávají příchozí požadavky prohlížeče, načítají data modelu a pak určují šablony zobrazení, které vrátí odpověď do prohlížeče.
Všechny tyto koncepty probereme v této sérii kurzů a ukážeme vám, jak je použít k sestavení aplikace.
Začněme vytvořením třídy kontroleru. V Průzkumník řešení klikněte pravým tlačítkem na složku Kontrolery a potom klikněte na Přidat a kontroler.
V dialogovém okně Přidat uživatelské rozhraní klikněte na Kontroler MVC 5 – prázdný a potom klikněte na Přidat.
Pojmenujte nový kontroler HelloWorldController a klikněte na Přidat.
Všimněte si v Průzkumník řešení, že byl vytvořen nový soubor s názvem HelloWorldController.cs a novou složku Views\HelloWorld. Kontroler je otevřený v integrovaném vývojovém prostředí (IDE).
Obsah souboru nahraďte následujícím kódem.
using System.Web;
using System.Web.Mvc;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my <b>default</b> action...";
}
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
}
Metody kontroleru vrátí jako příklad řetězec HTML. Kontroler má název HelloWorldController
a první metoda má název Index
. Pojďme ho vyvolat z prohlížeče. Spusťte aplikaci (stiskněte F5 nebo Ctrl+F5). V prohlížeči připojte k cestě na panelu Adresa text "HelloWorld". (Například na následujícím obrázku je http://localhost:1234/HelloWorld.
to ) Stránka v prohlížeči bude vypadat jako na následujícím snímku obrazovky. Ve výše uvedené metodě kód vrátil řetězec přímo. Řekli jste systému, aby vrátil kód HTML, a to se povedlo!
ASP.NET MVC vyvolá různé třídy kontroleru (a různé metody akcí v nich) v závislosti na příchozí adrese URL. Výchozí logika směrování adresy URL používaná ASP.NET MVC používá k určení kódu, který se má vyvolat, formát podobný tomuto:
/[Controller]/[ActionName]/[Parameters]
Formát směrování nastavíte v souboru App_Start/RouteConfig.cs .
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Když aplikaci spustíte a nezadáte žádné segmenty adresy URL, použije se výchozí kontroler Home a metoda akce Index zadaná v části defaults výše uvedeného kódu.
První část adresy URL určuje třídu kontroleru, která se má provést. Takže /HelloWorld se mapuje na HelloWorldController
třídu . Druhá část adresy URL určuje metodu akce třídy, která se má provést. Metoda /HelloWorld/Index by tedy způsobila Index
HelloWorldController
spuštění metody třídy . Všimněte si, že stačí přejít na /HelloWorld a Index
ve výchozím nastavení se použila metoda . Je to proto, že metoda s názvem Index
je výchozí metoda, která bude volána na kontroleru, pokud není explicitně zadána. Třetí část segmentu adresy URL ( Parameters
) je určená pro data tras. Data tras uvidíme později v tomto kurzu.
Přejděte na adresu http://localhost:xxxx/HelloWorld/Welcome
. Metoda se Welcome
spustí a vrátí řetězec "Toto je metoda akce Vítejte...". Výchozí mapování MVC je /[Controller]/[ActionName]/[Parameters]
. Kontroler pro tuto adresu URL je HelloWorld
a Welcome
je metodou akce. Část adresy URL jste ještě nepoužili [Parameters]
.
Pojďme tento příklad mírně upravit, abyste mohli kontroleru předat některé informace o parametrech z adresy URL (například /HelloWorld/Welcome?name=Scott&numtimes=4). Změňte metodu tak, Welcome
aby zahrnovala dva parametry, jak je znázorněno níže. Všimněte si, že kód používá funkci optional-parameter jazyka C# k označení, že pokud se pro tento parametr nepředá žádná hodnota, numTimes
parametr by měl být ve výchozím nastavení 1.
public string Welcome(string name, int numTimes = 1) {
return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);
}
Poznámka
Poznámka k zabezpečení: Výše uvedený kód používá httpUtility.HtmlEncode k ochraně aplikace před škodlivým vstupem (konkrétně JavaScript). Další informace najdete v tématu Postupy: Ochrana před zneužitím skriptů ve webové aplikaci použitím kódování HTML na řetězce.
Spusťte aplikaci a přejděte na ukázkovou adresu URL (http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4
). Můžete vyzkoušet různé hodnoty pro name
a numtimes
v adrese URL. Systém vazby modelu ASP.NET MVC automaticky mapuje pojmenované parametry z řetězce dotazu na panelu Adresa na parametry ve vaší metodě.
Ve výše uvedené ukázce se nepoužívá name
segment adresy URL ( Parameters
), parametry a numTimes
se předávají jako řetězce dotazu. Znak ? (otazník) ve výše uvedené adrese URL je oddělovač a následují řetězce dotazu. Znak & odděluje řetězce dotazu.
Nahraďte metodu Welcome následujícím kódem:
public string Welcome(string name, int ID = 1)
{
return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);
}
Spusťte aplikaci a zadejte následující adresu URL: http://localhost:xxx/HelloWorld/Welcome/1?name=Scott
Tentokrát třetí segment adresy URL odpovídal parametru ID.
trasy. Metoda Welcome
akce obsahuje parametr (ID
), který odpovídá specifikaci adresy URL v RegisterRoutes
metodě .
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
V ASP.NET aplikacích MVC je obvyklejší předávat parametry jako data trasy (jako jsme to udělali s ID výše), než je předávat jako řetězce dotazu. Můžete také přidat trasu, která jako data trasy v adrese URL předá parametry a name
numtimes
. Do souboru App_Start\RouteConfig.cs přidejte trasu "Hello":
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Hello",
url: "{controller}/{action}/{name}/{id}"
);
}
}
Spusťte aplikaci a přejděte na /localhost:XXX/HelloWorld/Welcome/Scott/3
adresu .
U mnoha aplikací MVC funguje výchozí trasa správně. Později v tomto kurzu se naučíte předávat data pomocí pořadače modelu a nebudete pro to muset upravovat výchozí trasu.
V těchto příkladech kontroler provádí část "VC" MVC – to znamená, že funguje zobrazení a kontroler. Kontroler vrací kód HTML přímo. Obvykle nechcete, aby kontrolery vracely kód HTML přímo, protože to je pro kódování velmi těžkopádné. Místo toho obvykle použijeme samostatný soubor šablony zobrazení, který nám pomůže vygenerovat odpověď HTML. Podívejme se dále na to, jak to můžeme udělat.