2012-03-23 12 views
5

Tengo un requisito en mi aplicación MVC para presentar al usuario una vista diferente de una acción basada en su función. ¿Cuál es la mejor manera de hacer esto?MVC - Vista de interruptor basada en la función de usuario

Actualmente tengo el siguiente código, que no me gusta:

if (HttpContext.User.IsInRole("Admin")) 
    return View("Details.Admin", model); 
else if (HttpContext.User.IsInRole("Power")) 
    return View("Details.Power", model); 

//default 
return View("Details", model); 

¿Sería ésta una buena opción para una acción de filtrado?

Respuesta

6

¿Sería una buena opción para un filtro de acción?

Absolutamente:

public class MyActionFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     var result = filterContext.Result as ViewResultBase; 
     if (result != null) 
     { 
      var user = filterContext.HttpContext.User; 
      if (user.IsInRole("Admin")) 
      { 
       result.ViewName = string.Format("{0}.Admin", filterContext.ActionDescriptor.ActionName); 
      } 
      else if (user.IsInRole("Power")) 
      { 
       result.ViewName = string.Format("{0}.Power", filterContext.ActionDescriptor.ActionName); 
      } 
     } 
    } 
} 

O incluso se podría construir un motor de vista personalizada.

+0

No creo que tenga suficientes instancias de esto para garantizar la creación de un motor de visualización, pero estaba pensando que el enfoque del filtro de acción probablemente sería bueno. Gracias Darin – Dismissile

Cuestiones relacionadas