Přidání nového kontroleru

Rick Anderson

Poznámka:

Aktualizovaná verze tohoto kurzu je k dispozici zde pomocí nejnovější verze sady Visual Studio. Nový kurz používá ASP.NET Core MVC, což v tomto kurzu přináší mnoho vylepšení.

V tomto kurzu se naučíte ASP.NET Core MVC s řadiči a zobrazeními. Razor Pages je nová alternativa v ASP.NET Core, což je programovací model založený na stránkách, který usnadňuje a zvyšuje produktivitu vytváření webového uživatelského rozhraní. Doporučujeme vyzkoušet kurz Razor Pages před verzí MVC. Návod Razor Pages:

  • Je snazší sledovat.
  • Obsahuje 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 udržovatelné. Aplikace založené na MVC obsahují:

  • Odels : Třídy, které představují data aplikace a které používají logiku ověřování k vynucení obchodních pravidel pro tato data.
  • Vews : Soubory šablony, 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é vracejí 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 vytvoření aplikace.

Začněme vytvořením třídy kontroleru. V Průzkumníku řešení klikněte pravým tlačítkem myši na složku Kontrolery a potom klikněte na přidata potom na Řadič.

Snímek obrazovky zobrazující okno Průzkumník řešení. Pravé tlačítko nabídky Kontrolery a podnabídka Přidat jsou otevřené.

V dialogovém okně Přidat šablonu klikněte na MVC 5 Controller - Empty a potom klikněte na Přidat.

Snímek obrazovky, který zobrazuje dialogové okno Přidat šablonu. Je vybrán prázdný řadič MVC 5.

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

přidání kontroleru

V Průzkumníku řešení si všimněte, že byl vytvořen nový soubor s názvem HelloWorldController.cs a novou složkou 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 V Průzkumníku řešení jsou podsložky Hello World Controller dot c a podsložky 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í řetězec HTML jako příklad. Řadič je pojmenován HelloWorldController a první metoda je pojmenována Index. Pojďme ho vyvolat z prohlížeče. Spusťte aplikaci (stiskněte klávesu F5 nebo Ctrl+F5). Připojte v prohlížeči "HelloWorld" k cestě v adresním řádku. (Například na obrázku níže 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 přímo řetězec. Řekli jste systému, aby vrátil nějaký kód HTML a udělal to!

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 závislosti na příchozí adrese URL. Výchozí logika směrování adres URL používaná v ASP.NET MVC využívá tento formát pro určení, jaký kód má být vyvolán:

/[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ž spustíte aplikaci a nezadáte žádné segmenty adresy URL, použije se výchozí kontroler "Home" a metoda akce Index zadaná v části výchozích hodnot 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 třídu HelloWorldController. Druhá část adresy URL určuje metodu akce třídy, která se má provést. Pokud by byla použita cesta /HelloWorld/Index, došlo by ke spuštění metody Index ve třídě HelloWorldController. Všimněte si, že jsme museli přejít jenom na /HelloWorld a Index metoda byla použita ve výchozím nastavení. Důvodem je to, že pojmenovaná Index metoda je výchozí metoda, která bude volána na kontroleru, pokud není explicitně určena. Třetí část segmentu adresy URL ( Parameters) je určená pro směrovací data. Později v tomto kurzu uvidíme data o trase.

Přejděte na http://localhost:xxxx/HelloWorld/Welcome. Metoda Welcome se spustí a vrátí řetězec "Toto je metoda Welcome action...". Výchozí mapování MVC je /[Controller]/[ActionName]/[Parameters]. Pro tuto adresu URL je HelloWorld kontroler a Welcome je to metoda akce. Zatím jste nepoužili [Parameters] část adresy URL.

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

Pojďme příklad mírně upravit, abyste mohli předat některé informace o parametrech z adresy URL kontroleru (například /HelloWorld/Welcome?name=Scott&numtimes=4). Změňte metodu Welcome tak, aby zahrnovala dva parametry, jak je znázorněno níže. Všimněte si, že kód používá funkci volitelného parametru jazyka C# k označení, že numTimes parametr by měl být výchozí na hodnotu 1, pokud pro tento parametr není předána žádná hodnota.

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 naleznete 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 v adresním řádku na parametry ve vaší metodě.

Snímek obrazovky znázorňující okno prohlížeče s adresou URL localhost dvojtečka 1 2 3 4 lomítko Hello World lomítko Welcome otazník name se rovná Scott a num times se rovná 4. Text v okně je Hello Scotte, počet opakování je 4.

V ukázce výše se segment adresy URL ( Parameters) nepoužívá, parametry name a numTimes se předávají jako řetězce dotazu. To? (otazník) ve výše uvedené adrese URL je oddělovač a řetězce dotazu následují. Znak > odděluje řetězce dotazu.

Nahraďte uvítací metodu 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, který zobrazuje okno prohlížeče s adresou URL localhost:1234/Hello World/Welcome/1?name=scott. V okně je text

Tentokrát třetí segment adresy URL odpovídal parametru ID. trasy. Welcome Metoda 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 směrovací data (jako jsme to udělali s ID výše), než je předat jako řetězce dotazu. Můžete také přidat trasu pro předání obou parametrů name a numtimes jako směrovacích dat v adrese URL. 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.

Snímek obrazovky znázorňující okno prohlížeče s URL localhost dvojtečka 1234 lomítko Hello World lomítko Welcome lomítko Scott 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 dozvíte, jak předávat data pomocí pořadače modelu a nebudete muset upravit výchozí trasu.

V těchto příkladech kontroler prováděl část "VC" MVC – to znamená, že zobrazení a kontroler fungují. Kontroler vrací kód HTML přímo. Obvykle nechcete, aby řadiče vracely kód HTML přímo, protože to je pro kód velmi těžkopádné. Místo toho obvykle k vygenerování odpovědi HTML použijeme samostatný soubor šablony zobrazení. Pojďme se podívat, jak to můžeme udělat.