Pregunta

Por casualidad, ¿hay alguna manera fácil de configurar un MasterView predeterminado para todas las acciones dentro de un controlador específico?

Por ejemplo, si tengo el HomeController quiero que todas las acciones dentro de él hereden el Site.Master por defecto, pero si estoy dentro del AccountsController Quiero que toda la acción herede el Admin.Master y así sucesivamente ..

Logré hacerlo con:

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

Pero al hacer esto, tengo que aplicarlo cada vez que llamo al método View.

Estaba buscando algo más simple como en los rieles 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 eso posible?

Gracias de antemano

¿Fue útil?

Solución

Puede anular OnActionExecuting en esa clase de Controlador.

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

O si lo desea, puede convertir esto en un ActionFilterAttribute que puede aplicar en el controlador o en el nivel de acción

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 a su vez usa así:

[MasterFileFilterAttribute(Master = "site")] 
public class HomeController : Controller 
{ 
    // Action methods 
}   
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top