Condividi tramite


Panoramica del controller ASP.NET MVC (VB)

di Stephen Walther

In questa esercitazione Stephen Walther presenta i controller MVC ASP.NET. Si apprenderà come creare nuovi controller e restituire diversi tipi di risultati dell'azione.

Questa esercitazione illustra l'argomento dei controller MVC, delle azioni del controller e dei risultati dell'azione di ASP.NET. Dopo aver completato questa esercitazione, si apprenderà come vengono usati i controller per controllare il modo in cui un visitatore interagisce con un sito Web MVC ASP.NET.

Informazioni sui controller

I controller MVC sono responsabili della risposta alle richieste effettuate su un sito Web MVC ASP.NET. Ogni richiesta del browser viene mappata a un determinato controller. Si supponga, ad esempio, di immettere l'URL seguente nella barra degli indirizzi del browser:

http://localhost/Product/Index/3

In questo caso viene richiamato un controller denominato ProductController. ProductController è responsabile della generazione della risposta alla richiesta del browser. Ad esempio, il controller potrebbe restituire una visualizzazione specifica al browser o il controller potrebbe reindirizzare l'utente a un altro controller.

L'elenco 1 contiene un semplice controller denominato ProductController.

List1 - Controller\ProductController.vb

Public Class ProductController
    Inherits System.Web.Mvc.Controller

    '
    ' GET: /Products/

    Function Index()
        ' Add action logic here
        Return View()
    End Function

End Class

Come si può vedere dall'elenco 1, un controller è solo una classe (una classe .NET o C# di Visual Basic). Un controller è una classe che deriva dalla classe base System.Web.Mvc.Controller. Poiché un controller eredita da questa classe di base, un controller eredita diversi metodi utili gratuitamente (in un momento vengono illustrati questi metodi).

Informazioni sulle azioni del controller

Un controller espone le azioni del controller. Un'azione è un metodo su un controller che viene chiamato quando si immette un URL specifico nella barra degli indirizzi del browser. Si supponga, ad esempio, di effettuare una richiesta per l'URL seguente:

http://localhost/Product/Index/3

In questo caso, il metodo Index() viene chiamato nella classe ProductController. Il metodo Index() è un esempio di azione del controller.

Un'azione controller deve essere un metodo pubblico di una classe controller. I metodi di visual Basic.NET, per impostazione predefinita, sono metodi pubblici. Tenere presente che qualsiasi metodo pubblico che si aggiunge a una classe controller viene esposto automaticamente come azione controller (è necessario prestare attenzione a questo perché un'azione controller può essere richiamata da chiunque nell'universo semplicemente digitando l'URL corretto in una barra degli indirizzi del browser).

Esistono alcuni requisiti aggiuntivi che devono essere soddisfatti da un'azione del controller. Non è possibile eseguire l'overload di un metodo usato come azione controller. Inoltre, un'azione controller non può essere un metodo statico. Oltre a questo, è possibile usare solo qualsiasi metodo come azione del controller.

Informazioni sui risultati dell'azione

Un'azione controller restituisce un elemento denominato risultato dell'azione. Un risultato dell'azione è quello che un'azione controller restituisce in risposta a una richiesta del browser.

Il framework ASP.NET MVC supporta diversi tipi di risultati delle azioni, tra cui:

  1. ViewResult: rappresenta HTML e markup.
  2. EmptyResult: non rappresenta alcun risultato.
  3. RedirectResult: rappresenta un reindirizzamento a un nuovo URL.
  4. JsonResult: rappresenta un risultato di notazione dell'oggetto JavaScript che può essere usato in un'applicazione AJAX.
  5. JavaScriptResult: rappresenta uno script JavaScript.
  6. ContentResult: rappresenta un risultato di testo.
  7. FileContentResult: rappresenta un file scaricabile (con il contenuto binario).
  8. FilePathResult : rappresenta un file scaricabile (con un percorso).
  9. FileStreamResult : rappresenta un file scaricabile (con un flusso di file).

Tutti questi risultati dell'azione ereditano dalla classe ActionResult di base.

Nella maggior parte dei casi, un'azione controller restituisce un oggetto ViewResult. Ad esempio, l'azione del controller di indice nell'elenco 2 restituisce un oggetto ViewResult.

Elenco 2 - Controller\BookController.vb

Public Class BookController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return View()
    End Function

End Class

Quando un'azione restituisce un oggetto ViewResult, il codice HTML viene restituito al browser. Il metodo Index() in List 2 restituisce una visualizzazione denominata Index nel browser.

Si noti che l'azione Index() nell'elenco 2 non restituisce un oggetto ViewResult(). Viene invece chiamato il metodo View() della classe base Controller. In genere, non si restituisce direttamente un risultato dell'azione. Si chiama invece uno dei metodi seguenti della classe base Controller:

  1. Visualizzazione: restituisce un risultato dell'azione ViewResult.
  2. Reindirizzamento: restituisce un risultato dell'azione RedirectResult.
  3. RedirectToAction: restituisce un risultato dell'azione RedirectToRouteResult.
  4. RedirectToRoute: restituisce un risultato dell'azione RedirectToRouteResult.
  5. Json: restituisce un risultato dell'azione JsonResult.
  6. JavaScriptResult: restituisce un JavaScriptResult.
  7. Contenuto: restituisce un risultato dell'azione ContentResult.
  8. File: restituisce un fileContentResult, FilePathResult o FileStreamResult a seconda dei parametri passati al metodo.

Quindi, se si vuole restituire un oggetto View al browser, si chiama il metodo View(). Se si vuole reindirizzare l'utente da un'azione del controller a un'altra, si chiama il metodo RedirectToAction(). Ad esempio, l'azione Details() nell'elenco 3 visualizza una visualizzazione o reindirizza l'utente all'azione Index() a seconda che il parametro Id abbia un valore.

Elenco 3 - CustomerController.vb

Public Class CustomerController
    Inherits System.Web.Mvc.Controller

    Function Details(ByVal id As Integer?)
        If Not id.HasValue Then
            Return RedirectToAction("Index")
        End If

        Return View()
    End Function
    Function Index()
        Return View()
    End Function

End Class

Il risultato dell'azione ContentResult è speciale. È possibile usare il risultato dell'azione ContentResult per restituire un risultato dell'azione come testo normale. Ad esempio, il metodo Index() in List 4 restituisce un messaggio come testo normale e non come HTML.

Elenco 4 - Controller\StatusController.vb

StatusController

System.Web.Mvc.Controller

Public Class StatusController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return Content("Hello World!")
    End Function

End Class

Quando viene richiamata l'azione StatusController.Index(), non viene restituita una visualizzazione. Al contrario, il testo non elaborato "Hello World!" viene restituito al browser.

Se un'azione controller restituisce un risultato che non è un risultato dell'azione, ad esempio una data o un intero, il risultato viene eseguito automaticamente in un oggetto ContentResult. Ad esempio, quando viene richiamata l'azione Index() di WorkController nell'elenco 5, la data viene restituita automaticamente come ContentResult.

Elenco 5 - WorkController.vb

Public Class WorkController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return DateTime.Now
    End Function

End Class

L'azione Index() in List 5 restituisce un oggetto DateTime. Il framework ASP.NET MVC converte l'oggetto DateTime in una stringa e esegue il wrapping automatico del valore DateTime in un contentResult. Il browser riceve la data e l'ora come testo normale.

Riepilogo

Lo scopo di questa esercitazione è stato introdurre i concetti relativi ai controller MVC, alle azioni del controller e ai risultati dell'azione del controller ASP.NET. Nella prima sezione si è appreso come aggiungere nuovi controller a un progetto MVC di ASP.NET. Successivamente, si è appreso come i metodi pubblici di un controller vengono esposti all'universo come azioni del controller. Infine, sono stati illustrati i diversi tipi di risultati dell'azione che possono essere restituiti da un'azione controller. In particolare, è stato illustrato come restituire un oggetto ViewResult, RedirectToActionResult e ContentResult da un'azione del controller.