Archivo de la etiqueta: controller

Controllers MVC


Fecha en que se escribió el post: 2009-05-20

Los Controllers son los encargados de “controlar” los request que se realizan hacia la aplicacion. Cada request es mapeado a un controlador particular encargado de dar el response al mismo.

Cada Controller se define en una clase que hereda de la clase System.Web.Mvc.Controller:

public class EmployeeController : Controller    { …

A su vez cada definicion de Controller para cada caso particular expone una serie de acciones. Que son estas Acciones? Las acciones son metodos expuestos por el Controller para atender cada request segun corresponda. Si por ejemplo hago un request a esta URL: http://localhost/Employee/Detalle/3 el metodo Detalle() del Controller Employee con el parametro 3, se ejecutara.

Todos los metodos deben ser publicos para poder atender los request. Hay que ser cuidadosos con que metodos exponemos o darle seguridad a cada uno para poder ser ejecutados (lo veremos más adelante). Las acciones expuestas por el Controller no pueden ser sobrecargadas y no deben ser estaticas.

Estas acciones dan un resultado o sea un response que son denominadas Action Result.

Los action result heredan de la clase ActionResult

Los action result mas comunes son:

  • Resultado HTML denominado ViewResult
  • Resultado vacio: EmptyResult
  • Redireccionamiento: RedirectResult
  • Resultado en JSON: JsonResult
  • Resultado JavaScript: JavaScriptResult
  • Resultado en texto: ContentResult
  • Descarga de archivo con contenido Binario: FileContentResult
  • Descarga de archivo con path: FilePathResult
  • Descarga de archivo con su stream: FIleStreamResult

Se puede llamar a los metodos de la clase base Controller para devolver un resultado desde la acción:

  • View que retorna un ViewResult
  • Redirect que retorna un RedirectResult
  • RedirectToAction que retorna un RedirectToRouteResult
  • RedirectToRoute que retorna un RedirectToRouteResult
  • Json que retorna un JsonResult
  • JavaScriptResult que retorna un JavaScriptResult
  • Content que retorna un ContentResult
  • File que retorna un FIleContentResult, un FilePathResult o un FileStreamResult

Cualquier valor que se quiera retornar que no sea un ActionResult se devolvera como un ContentResult.

Anuncios

Deja un comentario

Archivado bajo Teoría

Proceso de ejecución de una aplicación MVC en .NET


Fecha en que se escribió el post: 2009-05-10

Los request en una aplicacion basada en el framework ASP.NET MVC realizan acciones diferentes a las de una aplicacion ASP .NET.
Este es el orden de ejecución:

  1. Al primer Request desde el archivo Global.asax, los objetos Route (objetos que implentan RouteBase) son agregados al objeto RouteTable
  2. El modulo UrlRoutingModule (Un modulo HTTP) usa el primer objeto Route en el objeto RouteTable para crear un objeto RouteData el cual se usa para crear el objeto RequestContext (IHttpContext) e inicia el ruteo.
  3. Se crea un controlador de requests MVC. El objeto MvcRouteHandler crea una instancia de la clase MvcHandler y le pasa una instancia de RequestContext.
  4. El objeto MvcHandler usa la instancia del RequestContext para identificar el objeto IControllerFactory para crear el controlador.
  5. El MvcHandler llama al metodo Execute del controlador.
  6. El controlador determina a que metodo de que clase controladora debe llamar. Como la mayoria de todas las clases controladores heredan de la clase base Controller puede hacerlo determinandolo desde el ControllerActionInvoker. Así invoca al metodo correspondiente del request iniciado.
  7. El metodo invocado desde el controlador realiza su funcionalidad y retorna uno de estos tipos que se pueden retornar: ViewResult, RedirectToRouteResult, RedirectResult, ContentResult, JsonResult o EmptyResult.
  8. Si el request no coincide con ninguna ruta el UrlRoutingModule no hace nada y le pase el request al proceso habitual de ASP .NET o al procesamiento de solicitudes IIS.

Deja un comentario

Archivado bajo Teoría