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

Azioni e risultati speciali

Eseguire operazioni particolari come un reindirizzamento o un invio di dati JSON
Eseguire operazioni particolari come un reindirizzamento o un invio di dati JSON
Link copiato negli appunti

Nella gestione dei controller, rivestono particolare importanza gli oggetti restituiti dalle azioni, che ne descrivono il risultato.

Nel codice visto in precedenza questo oggetto è di tipo ViewResult e rappresenta una vista. Potremmo però aver bisogno di scrivere un'azione che invece di restituire una vista (intesa come codice HTML) svolge compiti particolari, come ad esempio:

  • reindirizzare il browser dell'utente ad un altro URL
  • restituire dati JSON
  • richiamare un'altra azione del controller

Classi di uso comune sono PartialViewResult, FileResult, RedirectResult, JsonResult e RedirectToRouteResult. Elemento comune a tutti i risultati è la derivazione dalla stessa classe padre ActionResult, che rappresenta un risultato generico.

La struttura modulare del framework ci permette comunque di scrivere classi personalizzate per la nostra applicazione, se quelle predefinite non si adattino al nostro scopo.

Nel seguente listato è rappresentato un controller che fa uso di risultati specifici:

public class HomeController : Controller
{
  // Mostra una vista
  public ViewResult Index()
  {
    return View(); 
  }
  
  // Restituisce un file al client
  public FileResult GetFile(string fileName, string fileType)
  {
    return File(fileName, fileType, null);
  }
   
  // Reindirizza l'utente ad un altro URL
  public RedirectResult RedirectToUrl(string url)
  {
    return Redirect(url); 
  }
  
  // Restituisce dati al client in formato JSON
  public JsonResult GetJson()
  {
    return Json(new List<string>() { "aa", "bb" }); 
  }
  
  // Reindirizza l'utente ad un'altra azione
  public RedirectToRouteResult NewHome() 
  {
    return RedirectToAction("Index"); 
  }
}

Come visto in precedenza per le viste, anche per tutti gli altri risultati è presente una funzione che restituisce la classe corrispondente. Ad esempio, per reindirizzare l'utente verso un certo URL abbiamo bisogno di un oggetto di tipo RedirectResult, ottenuto richiamando la funzione Redirect(url) della classe astratta Controller.

È importante notare come le funzioni vengono fornite soltanto per semplificare la scrittura del codice. Nessuno ci vieta, infatti, di dichiarare direttamente l'oggetto di cui abbiamo bisogno scrivendo il codice nel modo seguente:

 
public class HomeController : Controller
{
  public RedirectResult RedirectToUrl()
  {
    return new RedirectResult("http://www.html.it");
  }
}

Ti consigliamo anche