ASP.NET MVC - Définissez la vue principale en conséquence avec le contrôleur
-
07-07-2019 - |
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
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
}