Freigeben über


Hinzufügen eines neuen Controllers

von Rick Anderson

Hinweis

Eine aktualisierte Version dieses Lernprogramms ist hier mit der neuesten Version von Visual Studio verfügbar. Das neue Lernprogramm verwendet ASP.NET Core MVC, das viele Verbesserungen in diesem Lernprogramm bietet.

In diesem Lernprogramm lernen Sie ASP.NET Core MVC mit Controllern und Ansichten. Razor Pages ist eine neue Alternative in ASP.NET Core, einem seitenbasierten Programmiermodell, das das Erstellen von Web-UI erleichtert und produktiver macht. Wir empfehlen Ihnen, das Lernprogramm "Razor Pages " vor der MVC-Version zu testen. Das Razor Pages-Tutorial:

  • Es ist einfacher zu folgen.
  • Umfasst mehr Funktionen.
  • Ist der bevorzugte Ansatz für die entwicklung neuer Apps.

MVC steht für Model-View-Controller. MVC ist ein Muster für die Entwicklung von Anwendungen, die gut gestaltet, testbar und einfach zu verwalten sind. MVC-basierte Anwendungen enthalten:

  • M-Odels : Klassen, die die Daten der Anwendung darstellen und Validierungslogik verwenden, um Geschäftsregeln für diese Daten zu erzwingen.
  • Vews : Vorlagendateien, die Ihre Anwendung zum dynamischen Generieren von HTML-Antworten verwendet.
  • C-Ontroller: Klassen, die eingehende Browseranforderungen verarbeiten, Modelldaten abrufen und dann Ansichtsvorlagen angeben, die eine Antwort auf den Browser zurückgeben.

Wir behandeln alle diese Konzepte in dieser Lernprogrammreihe und zeigen Ihnen, wie Sie diese verwenden können, um eine Anwendung zu erstellen.

Beginnen wir mit dem Erstellen einer Controllerklasse. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Ordner "Controller " und dann auf "Hinzufügen" und dann auf "Controller".

Screenshot des Fensters

Klicken Sie im Dialogfeld „Gerüst hinzufügen“ auf „MVC 5 Controller – Leer“ und dann auf „Hinzufügen“.

Screenshot des Dialogfelds

Nennen Sie den neuen Controller "HelloWorldController", und klicken Sie auf "Hinzufügen".

Controller hinzufügen

Beachten Sie im Projektmappen-Explorer , dass eine neue Datei mit dem Namen HelloWorldController.cs und einem neuen Ordner "Views\HelloWorld" erstellt wurde. Der Controller ist in der IDE geöffnet.

Screenshot der Registerkarte

Ersetzen Sie den Inhalt der Datei durch den folgenden Code.

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..."; 
        } 
    } 
}

Die Controllermethoden geben eine HTML-Zeichenfolge als Beispiel zurück. Der Controller wird benannt HelloWorldController , und die erste Methode wird benannt Index. Rufen wir sie aus einem Browser auf. Führen Sie die Anwendung aus (drücken Sie F5 oder STRG+F5). Fügen Sie im Browser "HelloWorld" an den Pfad in der Adressleiste an. (In der nachstehenden Abbildung ist es zum Beispiel http://localhost:1234/HelloWorld..) Die Seite im Browser wird wie der folgende Screenshot aussehen. In der obigen Methode hat der Code eine Zeichenfolge direkt zurückgegeben. Sie haben dem System gesagt, es soll nur etwas HTML zurückgeben, und das hat es getan!

Screenshot der Registerkarte für localhost mit dem Text im Fenster:

ASP.NET MVC ruft je nach eingehender URL unterschiedliche Controllerklassen (und verschiedene Aktionsmethoden darin) auf. Die standardmäßige URL-Routinglogik, die von ASP.NET MVC verwendet wird, verwendet ein Format wie das folgende, um zu bestimmen, welcher Code aufgerufen werden soll:

/[Controller]/[ActionName]/[Parameters]

Sie legen das Format für das Routing in der Datei App_Start/RouteConfig.cs fest.

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 }
    );
}

Wenn Sie die Anwendung ausführen und keine URL-Segmente angeben, wird standardmäßig der "Home"-Controller und die im Standardabschnitt des obigen Codes angegebene "Index"-Aktionsmethode verwendet.

Der erste Teil der URL bestimmt die auszuführende Controllerklasse. Also ordnet /HelloWorld der HelloWorldController Klasse zu. Der zweite Teil der URL bestimmt die Auszuführende Aktionsmethode für die Klasse. Daher würde /HelloWorld/Index dazu führen, dass die Index Methode der HelloWorldController Klasse ausgeführt wird. Beachten Sie, dass wir nur zu /HelloWorld navigieren mussten und die Index Methode standardmäßig verwendet wurde. Dies liegt daran, dass eine benannte Index Methode die Standardmethode ist, die auf einem Controller aufgerufen wird, wenn eine nicht explizit angegeben ist. Der dritte Teil des URL-Segments (Parameters) ist für Routendaten. Später in diesem Lernprogramm werden Routendaten angezeigt.

Navigieren Sie zu http://localhost:xxxx/HelloWorld/Welcome. Die Welcome-Methode wird ausgeführt und gibt die Zeichenfolge „Dies ist die Welcome-Action-Methode...“ zurück. Die MVC-Standardzuordnung ist /[Controller]/[ActionName]/[Parameters]. Bei dieser URL ist HelloWorld der Controller und Welcome die Aktionsmethode. Sie haben den Teil [Parameters] der URL noch nicht verwendet.

Screenshot der Registerkarte des lokalen Hosts mit dem Text Dies ist die Willkommens-Aktionsmethode im Fenster.

Lassen Sie uns das Beispiel etwas ändern, damit Sie einige Parameterinformationen von der URL an den Controller übergeben können (z . B. /HelloWorld/Welcome?name=Scott&numtimes=4). Ändern Sie Die Welcome Methode so, dass sie zwei Parameter enthält, wie unten dargestellt. Beachten Sie, dass der Code das optionale C#-Parameterfeature verwendet, um anzugeben, dass der numTimes Parameter standardmäßig auf 1 festgelegt werden soll, wenn kein Wert für diesen Parameter übergeben wird.

public string Welcome(string name, int numTimes = 1) {
     return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);
}

Hinweis

Sicherheitshinweis: Der obige Code verwendet HttpUtility.HtmlEncode , um die Anwendung vor bösartigen Eingaben (nämlich JavaScript) zu schützen. Weitere Informationen finden Sie unter How to: Protect Against Script Exploits in a Web Application by Applying HTML Encoding to Strings.

Führen Sie Ihre Anwendung aus, und navigieren Sie zur Beispiel-URL (http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4). Sie können für name und numtimes in der URL verschiedene Werte ausprobieren. Das ASP.NET MVC-Modellbindungssystem ordnet die benannten Parameter aus der Abfragezeichenfolge in der Adressleiste automatisch Parametern in Ihrer Methode zu.

Screenshot eines Browserfensters mit der URL localhost Doppelpunkt 1234 Schrägstrich Hello World Schrägstrich Welcome Fragezeichen name gleich Scott und numTimes gleich 4. Der Text im Fenster lautet Hello Scott, Num Times ist 4.

Im obigen Beispiel wird das URL-Segment ( Parameters) nicht verwendet, die name Parameter numTimes werden als Abfragezeichenfolgen übergeben. Das "?" (Fragezeichen) in der obigen URL ist ein Trennzeichen, und die Abfrageparameter folgen. Das &Zeichen trennt Abfragezeichenfolgen.

Ersetzen Sie die Welcome-Methode durch den folgenden Code:

public string Welcome(string name, int ID = 1)
{
    return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);
}

Führen Sie die Anwendung aus, und geben Sie die folgende URL ein: http://localhost:xxx/HelloWorld/Welcome/1?name=Scott

Screenshot eines Browserfensters mit dem lokalen U R L-Hostkolon 1 2 3 4 Schrägstrich Hello World Schrägstrich Willkommen Schrägstrich 1 Fragezeichenname entspricht Scott. Der Text im Fenster lautet Hello Scott ID 1.

Dieses Mal stimmte das dritte URL-Segment mit dem Routenparameter ID. überein. Die Welcome Aktionsmethode enthält einen Parameter (ID), der der URL-Spezifikation in der RegisterRoutes Methode entspricht.

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 }
    );
}

In ASP.NET MVC-Anwendungen ist es typischer, Parameter als Routendaten (wie bei der obigen ID) zu übergeben, als sie als Abfragezeichenfolgen zu übergeben. Sie können auch eine Route hinzufügen, um sowohl name als auch numtimes als Routendaten in der URL zu übergeben. Fügen Sie in der Datei App_Start\RouteConfig.cs die Route "Hello" hinzu:

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}"
       );
   }
}

Führen Sie die Anwendung aus, und navigieren Sie zu /localhost:XXX/HelloWorld/Welcome/Scott/3.

Screenshot eines Browserfensters mit dem lokalen U R L-Hostpunkt 1 2 3 4 Schrägstrich Hello World Schrägstrich Willkommen Schrägstrich Scott Schrägstrich Scott Schrägstrich 3. Der Text im Fenster lautet Hello Scott ID 3.

Bei vielen MVC-Anwendungen funktioniert die Standardroute einwandfrei. Sie lernen später in diesem Lernprogramm, Daten mithilfe des Modellordners zu übergeben, und Sie müssen die Standardroute dafür nicht ändern.

In diesen Beispielen hat der Controller den "VC"-Teil von MVC übernommen, das heißt, die Aufgaben von View und Controller. Der Controller gibt direkt HTML zurück. Normalerweise möchten Sie nicht, dass Controller HTML direkt zurückgeben, da dies sehr umständlich zu coden ist. Stattdessen verwenden wir in der Regel eine separate Ansichtsvorlagendatei, um die HTML-Antwort zu generieren. Schauen wir uns als Nächstes an, wie wir dies tun können.