Sdílet prostřednictvím


Přidání nového kontroleru

Rick Anderson

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.

Snímek obrazovky znázorňující okno Průzkumník řešení Otevřená je místní nabídka Kontrolery a pod nabídka Přidat.

V dialogovém okně Přidat uživatelské rozhraní klikněte na Kontroler MVC 5 – prázdný a potom klikněte na Přidat.

Snímek obrazovky s dialogovým oknem Přidat vygenerované uživatelské rozhraní Je vybraný kontroler M V C 5 Prázdný.

Pojmenujte nový kontroler HelloWorldController a klikněte na Přidat.

přidat kontroler

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).

Snímek obrazovky znázorňující otevřenou kartu Hello World Controller dot c s V Průzkumník řešení jsou podsložky Hello World Controller tečky a Hello World zakroužkovány červeně.

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!

Snímek obrazovky znázorňující kartu místního hostitele s textem Toto je moje výchozí akce v okně

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 IndexHelloWorldController 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] .

Snímek obrazovky znázorňující kartu místního hostitele s textem Toto je metoda akce Vítejte v okně

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ě.

Snímek obrazovky, který zobrazuje okno prohlížeče s dvojtečka místního hostitele U R L 1 2 3 4 lomítko Hello World lomítko uvítání název otazníku se rovná Scott a číslo krát se rovná 4. Text v okně je Hello Scott Num Times je 4.

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

Snímek obrazovky zobrazující okno prohlížeče s dvojtečka místního hostitele U R L 1 2 3 4 lomítko Hello World lomítko Vítejte lomítko 1 název otazníku rovná scott. Text v okně je Hello Scott ID 1.

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 namenumtimes . 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/3adresu .

Snímek obrazovky, který zobrazuje okno prohlížeče s dvojtečka místního hostitele U R L 1 2 3 4 lomítko Hello World lomítko Vítejte lomítko Scott dopředu lomítko 3. Text v okně je Hello Scott ID 3.

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.