2009-09-13 8 views
5

Por casualidad, ¿hay alguna manera fácil de establecer un MasterView predeterminado para todas las acciones dentro de un controlador específico?ASP.NET MVC - Configure la Vista maestra de acuerdo con el Controlador

Por ejemplo, si tengo el HomeController Quiero todas las acciones dentro de él para heredar la Site.Master por defecto, pero si estoy dentro de AccountsController Quiero toda la acción de heredar la administración . dominar y así sucesivamente ..

he conseguido hacerlo con:

return View("viewName", "masterName", objectModel); 

Pero al hacer esto tengo que aplicar cada vez que llamo el método Vista.

que estaba buscando algo más simple como sobre raíles, donde podemos declarar:

class HomeController < ApplicationController 

    layout 'site' 

    def index 
    end 

    def create 
    ... 

end 

class AccountsController < ApplicationController 

    layout 'admin' 

    def index 
    end 

    def create 
    ... 

end 

¿Es posible?

Gracias de antemano

Respuesta

6

usted podría anular OnActionExecuting en esa clase controlador.

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    ViewData["MasterfileToUser"] = "site"; 
}  

O si lo desea, puede convertir esto en un ActionFilterAttribute se puede aplicar en el controlador o la acción a nivel

using System; 
using System.Web.Mvc; 
public class MasterFileFilterAttribute : ActionFilterAttribute 
{ 
    public string Master { get; set; } 

    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    {   
      if (filterContext.Result is ViewResult) 
        ((ViewResult)filterContext.Result).MasterName = Master; 
    } 
} 

que luego en uso a su vez de esta manera:

[MasterFileFilterAttribute(Master = "site")] 
public class HomeController : Controller 
{ 
    // Action methods 
} 
+0

Hola Olle, gracias por tu respuesta. Solo una cosa que no capté, ¿cómo refleja ViewData ["MasterfileToUser"] el archivo maestro? ¿Hay alguna otra cosa que deba hacer para que cargue correctamente el archivo maestro? – zanona

+1

Mi mala asignación de viewdata no funcionará. Tomé una segunda puñalada pero actualmente no estoy en un lugar donde pueda probar esto. En OnActionExecuted el resultado (una instancia de ViewResult) está disponible, tiene una propiedad de página maestra, así que ahora la estoy asignando allí. Por favor, pruébese a sí mismo :) – olle

+0

Olle Solo uno piensa aquí ... Ahora cada vez que llamo al método RedirectToAction arroja un error: No se puede convertir el objeto del tipo 'System.Web.Mvc.RedirectToRouteResult' para escribir 'System.Web. Mvc.ViewResult '. Y activa la clase MasterFileFileAttribute. ¿Alguna idea sobre cómo resolverlo? Gracias – zanona

Cuestiones relacionadas