Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
En este tutorial se explora el tema de los controladores de MVC de ASP.NET, las acciones de los controladores y los resultados de las acciones. Al terminar el tutorial, sabrá cómo se usan los controlador para controlar la forma en que los visitantes interactúan con un sitio web de MVC de ASP.NET.
Descripción de los controladores
Los controladores de MVC son los responsables de responder a las solicitudes realizadas en un sitio web de MVC de ASP.NET. Cada solicitud del explorador se asigna a un controlador determinado. Por ejemplo, imagine que escribe la siguiente URL en la barra de direcciones del explorador web:
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 puede redireccionar al usuario a otro controlador.
La lista 1 contiene un controlador simple llamado ProductController.
Lista 1: Controllers\ProductController.vb
Public Class ProductController
Inherits System.Web.Mvc.Controller
'
' GET: /Products/
Function Index()
' Add action logic here
Return View()
End Function
End Class
Como puede ver en la lista 1, un controlador no es más que una clase (una clase de C# o Visual Basic .NET). Un controlador es una clase que deriva de la clase System.Web.Mvc.Controller base. Dado que un controlador hereda de esta clase base, hereda varios métodos útiles de forma gratuita (estos métodos se describirán en un momento).
Descripción de las acciones de controlador
Los controladores exponen acciones de controlador. Una acción es un método de un controlador al que se llama cuando se escribe una dirección URL determinada en la barra de direcciones del explorador web. Por ejemplo, imagine que realiza solicita la siguiente dirección 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 controlador.
Las acciones de controlador deben ser métodos públicos de una clase de controlador. De forma predeterminada, los métodos de Visual Basic.NET son públicos. Tenga en cuenta que cualquier método público que se agrega a una clase de controlador se expone automáticamente como acción de controlador (se debe tener cuidado con esto, ya que cualquiera puede invocar una acción de controlador simplemente escribiendo la dirección URL correcta en la barra de direcciones de un explorador).
Las acciones de controlador deben cumplir varios requisitos adicionales. Los métodos que se usan como acciones de controlador no se pueden sobrecargar. Además, una acción de controlador no puede ser un método estático. Aparte de eso, casi cualquier método se puede utilizar como una acción de controlador.
Descripción de los resultados de las acciones
Las acciones de controlador devuelven algo denominado resultado de la acción. Un resultado de una acción es lo que devuelve una acción de controlador en respuesta a una solicitud de un explorador.
El marco MVC de ASP.NET admite 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 dirección URL nueva.
- JsonResult: representa un resultado de notación de objetos JavaScript que se puede usar en una aplicación de AJAX.
- JavaScriptResult: representa un script de JavaScript.
- ContentResult: representa un resultado de texto.
- FileContentResult: representa un archivo que se puede descargar (con el contenido binario).
- FilePathResult: representa un archivo que se puede descargar (con una ruta de acceso).
- FileStreamResult: representa un archivo que se puede descargar (con una secuencia de archivos).
Todos estos resultados de acción heredan de la clase ActionResult base.
En la mayoría de los casos, las acciones de controlador devuelven una acción ViewResult. Por ejemplo, la acción del controlador Index de la lista 2 devuelve una acción ViewResult.
Lista 2: Controllers\BookController.vb
Public Class BookController
Inherits System.Web.Mvc.Controller
Function Index()
Return View()
End Function
End Class
Cuando una acción devuelve un objeto 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 una acción ViewResult(). En su lugar, se llama al método View() de la clase base Controller. Normalmente, no se devuelven directamente los resultados de las acciones. 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 objeto FileContentResult, FilePathResult o FileStreamResult en función de los parámetros que se hayan pasado al método.
Por tanto, si quiere devolver una vista al explorador, llame al método View(). Si quiere redireccionar 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 redirecciona al usuario a la acción Index() en función de si el parámetro Id tiene un valor.
Lista 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
El resultado de la acción ContentResult es especial. Puede usar el resultado de la acción ContentResult para devolver un resultado de acción en forma de texto sin formato. Por ejemplo, el método Index() de la lista 4 devuelve un mensaje en forma de texto sin formato, no con formato HTML.
Lista 4: Controllers\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
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), este se encapsula automáticamente en ContentResult. Por ejemplo, cuando se invoca la acción Index() del elemento WorkController de la lista 5, la fecha se devuelve automáticamente en forma de ContentResult.
Lista 5: WorkController.vb
Public Class WorkController
Inherits System.Web.Mvc.Controller
Function Index()
Return DateTime.Now
End Function
End Class
La acción Index() de la lista 5 devuelve un objeto DateTime. El marco MVC de ASP.NET convierte el objeto DateTime en una cadena y encapsula el valor de DateTime en un elemento ContentResult automáticamente. El explorador recibe la fecha y la hora en forma de texto sin formato.
Resumen
El propósito de este tutorial era presentarle los conceptos de controladores de MVC de ASP.NET, acciones de controlador y resultados de acciones de controlador. En la primera sección, aprendió a agregar nuevos controladores a un proyecto de MVC de ASP.NET. Luego, ha aprendido cómo se exponen los métodos públicos de un controlador al universo en forma de 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, hemos explicado cómo devolver un ViewResult, un RedirectToActionResult y un ContentResult desde una acción de controlador.