Condividi tramite


Aggiunta di un nuovo controller

di Rick Anderson

Nota

Una versione aggiornata di questa esercitazione è disponibile qui usando la versione più recente di Visual Studio. La nuova esercitazione usa ASP.NET Core MVC, che offre molti miglioramenti in questa esercitazione.

Questa esercitazione illustra ASP.NET Core MVC con i controller e le viste. Razor Pages è una nuova alternativa in ASP.NET Core, un modello di programmazione basato su pagine che semplifica e rende più produttiva la creazione dell'interfaccia utente Web. È consigliabile provare l'esercitazione sulle pagine Razor prima della versione MVC. L'esercitazione sulle pagine Razor:

  • È più semplice da seguire.
  • Riguarda più funzionalità.
  • È l'approccio preferito per lo sviluppo di nuove app.

MVC è l'acronimo di model-view-controller. MVC è uno schema per lo sviluppo di applicazioni ben strutturate, testabili e facili da gestire. Le applicazioni basate su MVC contengono:

  • M odels: classi che rappresentano i dati dell'applicazione e che usano la logica di convalida per applicare regole business per tali dati.
  • V iews: file modello usati dall'applicazione per generare dinamicamente risposte HTML.
  • Ontroller C : classi che gestiscono le richieste del browser in ingresso, recuperano i dati del modello e quindi specificano i modelli di visualizzazione che restituiscono una risposta al browser.

In questa serie di esercitazioni verranno illustrati tutti questi concetti e verrà illustrato come usarli per compilare un'applicazione.

Per iniziare, creare una classe controller. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla cartella Controller e quindi scegliere Aggiungi, quindi Controller.

Screenshot che mostra la finestra Esplora soluzioni. Il menu di scelta rapida Controller e il menu Aggiungi sottomenu sono aperti.

Nella finestra di dialogo Aggiungi scaffolding fare clic su Controller MVC 5 - Vuoto e quindi fare clic su Aggiungi.

Screenshot che mostra la finestra di dialogo Aggiungi scaffolding. È selezionata l'opzione Controller M V C 5 Vuota.

Assegnare al nuovo controller il nome "HelloWorldController" e fare clic su Aggiungi.

aggiungere il controller

Si noti che in Esplora soluzioni che è stato creato un nuovo file denominato HelloWorldController.cs e una nuova cartella Views\HelloWorld. Il controller è aperto nell'IDE.

Screenshot che mostra la scheda Hello World controller punto c s aperta. Nella Esplora soluzioni, la sottocartella Hello World Controller dot c s e la sottocartella Hello World sono cerchiate in rosso.

Sostituire il contenuto del file con il codice seguente.

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

I metodi controller restituiscono una stringa html come esempio. Il controller è denominato HelloWorldController e il primo metodo è denominato Index. È possibile richiamarlo da un browser. Eseguire l'applicazione (premere F5 o CTRL+F5). Nel browser aggiungere "HelloWorld" al percorso nella barra degli indirizzi. (Ad esempio, nella figura seguente, è http://localhost:1234/HelloWorld.) La pagina nel browser sarà simile alla schermata seguente. Nel metodo precedente il codice ha restituito direttamente una stringa. Hai detto al sistema di restituire solo codice HTML, e lo ha fatto!

Screenshot che mostra la scheda host locale con il testo This is my default action (Questa è l'azione predefinita nella finestra).

ASP.NET MVC richiama classi controller diverse (e metodi di azione diversi all'interno di essi) a seconda dell'URL in ingresso. La logica di routing url predefinita usata da ASP.NET MVC usa un formato simile al seguente per determinare il codice da richiamare:

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

Impostare il formato per il routing nel file 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 }
    );
}

Quando si esegue l'applicazione e non si specificano segmenti di URL, per impostazione predefinita viene usato il controller "Home" e il metodo di azione "Index" specificato nella sezione predefinita del codice precedente.

La prima parte dell'URL determina la classe controller da eseguire. Quindi /HelloWorld esegue il mapping alla HelloWorldController classe . La seconda parte dell'URL determina il metodo di azione sulla classe da eseguire. Pertanto , /HelloWorld/Index causerebbe l'esecuzione Index del metodo della HelloWorldController classe . Si noti che è stato necessario passare a /HelloWorld e il Index metodo è stato usato per impostazione predefinita. Questo perché un metodo denominato Index è il metodo predefinito che verrà chiamato su un controller se non ne viene specificato uno in modo esplicito. La terza parte del segmento di URL ( Parameters) è relativa ai dati di route. I dati di route verranno visualizzati più avanti in questa esercitazione.

Passare a http://localhost:xxxx/HelloWorld/Welcome. Il metodo Welcome viene eseguito e restituisce la stringa "This is the Welcome action method...". Il mapping MVC predefinito è /[Controller]/[ActionName]/[Parameters]. Per questo URL, il controller è HelloWorld e il metodo di azione è Welcome. Non è stata ancora usata la parte [Parameters] dell'URL.

Screenshot che mostra la scheda host locale con il testo This is the Welcome action method in the window( Questa è il metodo di azione di benvenuto nella finestra).

Si modificherà leggermente l'esempio in modo che sia possibile passare alcune informazioni sui parametri dall'URL al controller, ad esempio /HelloWorld/Welcome?name=Scott&numtimes=4. Modificare il Welcome metodo in modo da includere due parametri, come illustrato di seguito. Si noti che il codice usa la funzionalità del parametro facoltativo C# per indicare che il numTimes parametro deve essere impostato su 1 se non viene passato alcun valore per tale parametro.

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

Nota

Nota sulla sicurezza: il codice precedente usa HttpUtility.HtmlEncode per proteggere l'applicazione da input dannoso (ovvero JavaScript). Per altre informazioni, vedere Procedura: Proteggere dagli exploit di script in un'applicazione Web applicando la codifica HTML alle stringhe.

Eseguire l'applicazione e passare all'URL di esempio (http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4). È possibile provare diversi valori per name e numtimes nell'URL. Il sistema di associazione di modelli MVC ASP.NET esegue automaticamente il mapping dei parametri denominati dalla stringa di query nella barra degli indirizzi ai parametri nel metodo.

Screenshot che mostra una finestra del browser con i due punti dell'host locale U R L 1 2 3 4 barra Hello World barra di benvenuto nome punto interrogativo uguale a Scott e num volte uguale a 4. Il testo nella finestra è Hello Scott Num Times è 4.

Nell'esempio precedente, il segmento URL ( Parameters) non viene usato, i name parametri e numTimes vengono passati come stringhe di query. Il carattere ? (punto interrogativo) nell'URL precedente è un separatore e le stringhe di query seguono. Il carattere & separa le stringhe di query.

Sostituire il metodo Welcome con il codice seguente:

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

Eseguire l'applicazione e immettere l'URL seguente: http://localhost:xxx/HelloWorld/Welcome/1?name=Scott

Screenshot che mostra una finestra del browser con i due punti dell'host locale U R L 1 2 3 4 barra Hello World barra Di benvenuto barra 1 nome punto interrogativo uguale a scott. Il testo nella finestra è Hello Scott ID 1.

Questa volta il terzo segmento URL corrisponde al parametro ID. di route Il Welcome metodo di azione contiene un parametro (ID) che corrisponde alla specifica url nel RegisterRoutes metodo .

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 applicazioni MVC, è più tipico passare parametri come dati di route (come nell'ID precedente) che passarli come stringhe di query. È anche possibile aggiungere una route per passare i parametri e namenumtimes in come dati di route nell'URL. Nel file App_Start\RouteConfig.cs aggiungere la route "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}"
       );
   }
}

Eseguire l'applicazione e passare a /localhost:XXX/HelloWorld/Welcome/Scott/3.

Screenshot che mostra una finestra del browser con i due punti dell'host locale U R L 1 2 3 4 barra Hello World barra di benvenuto barra Scott barra 3. Il testo nella finestra è Hello Scott ID 3.

Per molte applicazioni MVC, la route predefinita funziona correttamente. Più avanti in questa esercitazione si apprenderà come passare i dati usando lo strumento di associazione di modelli e non sarà necessario modificare la route predefinita.

In questi esempi il controller ha eseguito la parte "VC" di MVC, ovvero la visualizzazione e il controller funzionano. Il controller restituisce direttamente l'HTML. In genere non si vuole che i controller restituisca direttamente HTML, perché questo diventa molto complesso per il codice. In genere si userà un file modello di visualizzazione separato per generare la risposta HTML. Esaminiamo ora come possiamo eseguire questa operazione.