Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

I controller in ASP.NET MVC

Cos'è un controller e come viene implmementato nel framework
Cos'è un controller e come viene implmementato nel framework
Link copiato negli appunti

I controller sono rappresentati all'interno del framework ASP.NET MVC da classi derivate dalla classe astratta Controller. La scelta di utilizzare interfacce e classi astratte è comune a molte altre componenti del framework che è stato sviluppato secondo un modello fortemente modulare, in modo da consentire allo sviluppatore di espanderne le funzionalità di base o di sostituirle con altre in modo estremamente semplice.

Esempio di controller in ASP.NET MVC

[HandleError]
public class GalleryController : Controller
{
  public ViewResult Index()
  {
    // Estraggo la lista delle immagini dal database
    GalleryDataContext context = new GalleryDataContext();
    List<GalleryImage> images = context.GetImages();
    
    // Richiamo la vista corrispondente all'azione
    // In questo caso la vista mostrerà la lista delle immagini
    return View(images);
  }
  
  public ViewResult Detail(int id)
  {
    // Estraggo dal database le informazioni per l'immagine indentificata dall'intero id
    GalleryDataContext context = new GalleryDataContext();
    var image = context.GetImageById(id);
    
    // Richiamo la vista corrispondente all'azione
    // In questo caso la vista mostrerà una immagine singola
    return View(image);
  }
}

Il codice precendete è una porzione del controller GalleryController che ha il compito di gestire la galleria di immagini. I metodi dichiarati all'interno dei controller, in questo caso Index e Detail, prendono il nome di azioni (action) e rispondono ad un particolare URL richiamato dall'utente.

Associazione tra URL, controller ed azione
Url Controller Azione
http://www.miosito.com/ HomeController Index
http://www.miosito.com/gallery GalleryController Index
http://www.miosito.com/gallery/detail/1 GalleryController Detail (id = 1)

Il compito di associare un particolare URL all'azione di un controller è svolto dalle classi del namespace System.Web.Routing, che esamineremo con maggior dettaglio più avanti nella guida. L'azione Index del nostro controller GalleryController restituisce una vista corrispondente alla homepage della galleria di immagini, l'azione Detail la vista che contiene informazioni su una singola immagine, e così via. In generale avremo una vista diversa per ciascuna azione dichiarata all'interno di un controller.

Nel caso dell'immagine singola (azione Detail), l'ID dell'immagine da recuperare viene passato ad ASP.Net MVC tramite URL:

http://www.miosito.com/gallery/detail/1

È importante notare che ogni funzione termina con una chiamata al metodo View(). Il valore restituito da questa funzione è anche quello restituito dall'azione del controller:

public ViewResult Detail(int id)
{
  ...
  
  return View(...); // l'action restituisce il valore ritornato da View()
}

Il metodo View

View() è un metodo definito nella classe padre Controller che si preoccupa di cercare automaticamente la vista da associare all'azione.

In genere - o meglio - convenzionalmente, una azione viene associata alla vista che ha il suo stesso nome. Ad esempio, per il nostro controller, dovremmo creazione la vista Index per l'azione Index e la vista Detail per il metodo Detail.

Questo metodo presenta molti overload utili in diverse situazioni. Ad esempio nel caso in cui la vista non avesse lo stesso nome dell'azione, è sufficiente richiamare la funzione passandogli il nome della vista da utilizzare:

public ViewResult Detail(int id)
{
  ...
  
  return View("VistaConNomeDiversoDallAzione");
}

Nel nostro controller utilizziamo un altro overload della funzione View(), utile per rendere disponibili nella vista i dati estratti dal model:

Esempio di controller in ASP.NET MVC

public ViewResult Detail(int id)
{
  // Estraggo dal database le informazioni per l'immagine indentificata dall'intero id
  GalleryDataContext context = new GalleryDataContext();
  var image = context.GetImageById(id);
  
  // Richiamo la vista corrispondente all'azione e gli passo i valori estratti
  return View(image);
}

Vedremo come mostrare queste informazioni all'utente nella parte della guida dedicata alle viste. Per la lista completa degli overload del metodo View(), possiamo consultare la documentazione ufficiale.

Ti consigliamo anche