2009-09-13 3 views
5

Par un moyen quelconque, est-il possible de définir un MasterView par défaut pour toutes les actions à l'intérieur d'un contrôleur spécifique?ASP.NET MVC - Définir Master View en conséquence avec le contrôleur

Par exemple, si je le HomeController Je veux que toutes les actions à l'intérieur à l'hériteront Site.master par défaut, mais si je suis à l'intérieur AccountsController Je veux l'action d'hériter Admin . Maîtrisez et ainsi de suite ..

j'ai réussi à le faire avec:

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

Mais en faisant cela, je dois l'appliquer à chaque fois que j'appelle la méthode de vue.

que je cherchais quelque chose de simple comme sur des rails où l'on peut 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 à l'avance

Répondre

6

Vous pourriez passer outre OnActionExecuting dans cette classe de contrôleur.

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

Ou si vous le souhaitez, vous pouvez transformer cela en un ActionFilterAttribute vous pouvez appliquer au niveau du contrôleur ou une 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 en usage à leur tour comme ceci:

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

Salut Olle, merci pour votre réponse. Juste une chose que je n'ai pas attrapée, est comment un ViewData ["MasterfileToUser"] reflète le fichier principal? Est-ce quelque chose d'autre que je devrais faire pour le faire charger le fichier maître correctement? – zanona

+1

Ma mauvaise affectation à partir de viewdata ne fonctionnera pas. J'ai pris un deuxième coup de poignard mais je ne suis actuellement pas quelque part où je peux tester cela. Dans OnActionExecuted, le résultat (une occurrence de ViewResult) est disponible. Il possède une propriété Masterpage, donc je l'attribue maintenant. S'il vous plaît vous tester :) – olle

+0

Olle Juste un pense ici ... Maintenant Chaque fois que j'appelle la méthode RedirectToAction il jette une erreur: Impossible de lancer l'objet de type 'System.Web.Mvc.RedirectToRouteResult' pour taper 'System.Web. Mvc.ViewResult '. Et accuse la classe MasterFileFileAttribute. Des idées sur la façon de le résoudre? Merci – zanona

Questions connexes