Question

Par hasard, existe-t-il un moyen simple de définir un MasterView par défaut pour toutes les actions d'un contrôleur spécifique?

Par exemple, si j'ai le HomeController , je veux que toutes les actions qu'il contient héritent du Site.Master par défaut, mais si je suis dans AccountsController Je veux que toutes les actions héritent du Admin.Master et ainsi de suite.

J'ai réussi à le faire avec:

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

Mais, ce faisant, je dois l'appliquer chaque fois que j'appelle la méthode View.

Je recherchais quelque chose de plus simple, comme sur des rails, où nous pouvons déclarer:

class HomeController < ApplicationController

  layout 'site'

   def index
   end

   def create
   ...

end

class AccountsController < ApplicationController

  layout 'admin'

  def index
  end

  def create
  ...  

end

Est-ce possible?

Merci d'avance

Était-ce utile?

La solution

Vous pouvez remplacer OnActionExecuting dans cette classe de contrôleurs.

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

Ou si vous le souhaitez, vous pouvez le transformer en un ActionFilterAttribute que vous pouvez appliquer au niveau du contrôleur ou de l'action

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 vous utilisez ensuite comme suit:

[MasterFileFilterAttribute(Master = "site")] 
public class HomeController : Controller 
{ 
    // Action methods 
}   
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top