2012-02-01 16 views
10

Acabo de empezar a usar MVC4 y el primer método de acción que veo tiene algo nuevo. Fui a ver el Internet y no puedo encontrar nada sobre esto:MVC4 - ContextDependentView - ¿Qué significa?

public ActionResult LogOn() 
     { 
      return ContextDependentView(); 
     } 

¿Alguien sabe lo que es un ContextDependentView es?

Algo nuevo para mí.

Respuesta

11

Su objetivo es facilitar los resultados de acción Vista o Vista parcial para las acciones Iniciar sesión y Registrar.

private ActionResult ContextDependentView() 
    { 
     string actionName = ControllerContext.RouteData.GetRequiredString("action"); 
     if (Request.QueryString["content"] != null) 
     { 
      ViewBag.FormAction = "Json" + actionName; 
      return PartialView(); 
     } 
     else 
     { 
      ViewBag.FormAction = actionName; 
      return View(); 
     } 
    } 

Al igual que otras cosas en MVC Se realiza mediante la convención de la convención ... aquí es cuando el Request.QueryString contiene una ?content=xxxx, se antepone "JSON" al nombre de la acción, lo mete una propiedad ViewBag y devuelve el parcial versión de la Vista. Por ejemplo:

Una solicitud para /Account/Login?content=test se resolvería en ViewBag.FormAction = "JsonLogin"; y luego devolvería un parcial.

La solicitud de /Account/Login tiene ninguna cadena de consulta de contenido por lo que su forma de acción sigue siendo ViewBag.FormAction = "Login";

+0

Muchas gracias por la explicación. –

+1

¿Crees que esto debería ser realmente un método privado en este controlador? Me parece que es algo que podría usarse para cualquier controlador. ¿Has usado este método tú mismo y lo dejaste como privado? –

+0

Para ser honesto, solo he comenzado a jugar con MVC4. Apuesto a que este método cambiará antes de que llegue a producción. También puede mover esto a su propia clase 'BaseController: Controller' si lo desea o puede usarlo. El truco de ponerlo en un controlador base privado o estático parece ser que lo obliga a realizar vistas para escenarios parciales y completos. Lo dejo tal como está y experimento con su función y veo a dónde va en Release Candidate (RC). –