Información general sobre el controlador de ASP.NET MVC (C#)
por Stephen Walther
En este tutorial, Stephen Walther le presenta ASP.NET controladores MVC. Aprenderá a crear nuevos controladores y a devolver diferentes tipos de resultados de acción.
Este tutorial explora el tema de los controladores de ASP.NET MVC, las acciones de los controladores y los resultados de las acciones. Una vez finalizado este tutorial, comprenderá cómo se usan los controlador para controlar el modo en que un visitante interactúa con un sitio web ASP.NET MVC.
Descripción de controladores
Los controladores MVC son responsables de responder a las solicitudes realizadas en un sitio web de ASP.NET MVC. Cada solicitud del explorador se asigna a un controlador determinado. Por ejemplo, imagine que escribe la siguiente URL en la barra de direcciones de su explorador:
http://localhost/Product/Index/3
En este caso, se invoca a un controlador llamado ProductController. ProductController se encarga de generar la respuesta a la solicitud del explorador. Por ejemplo, el controlador puede devolver una vista concreta al explorador o el controlador puede redirigir al usuario a otro controlador.
La lista 1 contiene un controlador simple llamado ProductController.
Lista 1: Controllers\ProductController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
namespace MvcApplication1.Controllers
{
public class ProductController : Controller
{
//
// GET: /Products/
public ActionResult Index()
{
// Add action logic here
return View();
}
}
}
Como puede ver en la lista 1, un controlador es simplemente una clase (una clase .NET o C# de Visual Basic). Un controlador es una clase que deriva de la clase base System.Web.Mvc.Controller. Debido a que un controlador hereda de esta clase base, un controlador hereda varios métodos útiles de forma gratuita (discutiremos estos métodos en un momento).
Descripción de las acciones de controlador
Un controlador expone las acciones de controlador. Una acción es un método de un controlador al que se llama cuando se escribe una URL determinada en la barra de direcciones del explorador. Por ejemplo, imagine que realiza una solicitud para la siguiente URL:
http://localhost/Product/Index/3
En este caso, se llama al método Index() en la clase ProductController. El método Index() es un ejemplo de acción de un controlador.
Una acción de controlador debe ser un método público de una clase de controlador. De manera predeterminada, los métodos en C# son métodos privados. Tenga en cuenta que cualquier método público que agregue a una clase de controlador se expone automáticamente como una acción de controlador (debe tener cuidado con esto ya que una acción de controlador puede ser invocada por cualquier persona del universo simplemente escribiendo la URL correcta en la barra de direcciones de un explorador).
Existen algunos requisitos adicionales que debe satisfacer una acción de controlador. Un método usado como acción de controlador no puede sobrecargarse. Además, una acción de controlador no puede ser un método estático. Aparte de eso, puede usar solo cualquier método como acción de controlador.
Descripción de los resultados de acción
Una acción de controlador devuelve algo denominado resultado de acción. Un resultado de acción es lo que devuelve una acción de controlador en respuesta a una solicitud de un explorador.
El marco ASP.NET MVC es compatible con varios tipos de resultados de acción, entre los que se incluyen:
- ViewResult: representa HTML y marcado.
- EmptyResult: no representa ningún resultado.
- RedirectResult: representa un redireccionamiento a una nueva dirección URL.
- JsonResult: representa un resultado de notación de objetos JavaScript que se puede usar en una aplicación AJAX.
- JavaScriptResult: representa un script de JavaScript.
- ContentResult: representa un resultado de texto.
- FileContentResult: representa un archivo descargable (con el contenido binario).
- FilePathResult: representa un archivo descargable (con una ruta de acceso).
- FileStreamResult: representa un archivo descargable (con una secuencia de archivos).
Todos estos resultados de acción heredan de la clase ActionResult base.
En la mayoría de los casos, una acción de controlador devuelve un ViewResult. Por ejemplo, la acción del controlador Index de la lista 2 devuelve un ViewResult.
Lista 2: Controllers\BookController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
namespace MvcApplication1.Controllers
{
public class BookController : Controller
{
public ActionResult Index()
{
// Add action logic here
return View();
}
}
}
Cuando una acción devuelve un ViewResult, se devuelve HTML al explorador. El método Index() de la lista 2 devuelve al explorador una vista llamada Index.
Observe que la acción Index() de la lista 2 no devuelve un ViewResult(). En su lugar, se llama al método View() de la clase base Controller. Normalmente, no se devuelve directamente el resultado de una acción. En su lugar, se llama a uno de los siguientes métodos de la clase base Controller:
- View: devuelve un resultado de la acción ViewResult.
- Redirección: devuelve un resultado de la acción RedirectResult.
- RedirectToAction: devuelve un resultado de la acción RedirectToRouteResult.
- RedirectToRoute: devuelve un resultado de la acción RedirectToRouteResult.
- Json: devuelve un resultado de la acción JsonResult.
- JavaScriptResult: devuelve un objeto JavaScriptResult.
- Content: devuelve un resultado de la acción ContentResult.
- File: devuelve un FileContentResult, FilePathResult o FileStreamResult en función de los parámetros pasados al método.
Así, si quiere devolver una Vista al explorador, llame al método View(). Si quiere redirigir al usuario de una acción de controlador a otra, llame al método RedirectToAction(). Por ejemplo, la acción Details() de la lista 3 muestra una vista o redirige al usuario a la acción Index() en función de si el parámetro Id tiene un valor.
Lista 3: CustomerController.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class CustomerController : Controller
{
public ActionResult Details(int? id)
{
if (!id.HasValue)
return RedirectToAction("Index");
return View();
}
public ActionResult Index()
{
return View();
}
}
}
El resultado de la acción ContentResult es especial. Puede usar el resultado de acción ContentResult para devolver un resultado de acción como texto sin formato. Por ejemplo, el método Index() de la lista 4 devuelve un mensaje como texto sin formato y no como HTML.
Lista 4: Controllers\StatusController.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class StatusController : Controller
{
public ActionResult Index()
{
return Content("Hello World!");
}
}
}
Cuando se invoca la acción StatusController.Index(), no se devuelve una vista. En su lugar, se devuelve al explorador el texto sin formato "Hola mundo".
Si una acción del controlador devuelve un resultado que no es un resultado de acción (por ejemplo, una fecha o un entero), el resultado se encapsula automáticamente en un ContentResult. Por ejemplo, cuando se invoca la acción Index() del WorkController de la lista 5, la fecha se devuelve como un ContentResult automáticamente.
Lista 5: WorkController.cs
using System;
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class WorkController : Controller
{
public DateTime Index()
{
return DateTime.Now;
}
}
}
La acción Index() de la lista 5 devuelve un objeto DateTime. El marco ASP.NET MVC convierte el objeto DateTime en una cadena y encapsula el valor DateTime en un ContentResult automáticamente. El explorador recibe la fecha y la hora como texto sin formato.
Resumen
El propósito de este tutorial era presentarle los conceptos de controladores de ASP.NET MVC, acciones de controlador y resultados de acción de controlador. En la primera sección, aprendió a agregar nuevos controladores a un proyecto de ASP.NET MVC. A continuación, ha aprendido cómo los métodos públicos de un controlador se exponen al universo como acciones del controlador. Por último, hemos analizado los distintos tipos de resultados de acción que se pueden devolver desde una acción del controlador. En concreto, hablamos de cómo devolver un ViewResult, un RedirectToActionResult y un ContentResult desde una acción de controlador.