2009-09-13 7 views
5

Gibt es irgendeine Möglichkeit, einen Standard-MasterView für alle Aktionen in einem bestimmten Controller zu setzen?ASP.NET MVC - Master-Ansicht entsprechend mit Controller einstellen

Zum Beispiel, wenn ich die Homecontroller Ich möchte, dass alle Aktionen in den Site.Master als Standard erben, aber wenn ich in bin AccountsController Ich möchte die ganze Action der Admin erben. Meister und so weiter ..

habe ich es geschafft, es zu tun mit:

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

Aber auf diese Weise habe ich es anwenden, jedesmal wenn ich die View-Methode aufrufen.

Ich war auf der Suche nach etwas einfacher wie auf Schienen, wo wir erklären können:

class HomeController < ApplicationController 

    layout 'site' 

    def index 
    end 

    def create 
    ... 

end 

class AccountsController < ApplicationController 

    layout 'admin' 

    def index 
    end 

    def create 
    ... 

end 

Ist das möglich?

Vielen Dank im Voraus

Antwort

6

Sie könnten in dieser Controller-Klasse außer Kraft setzen OnActionExecuting.

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

Oder wenn Sie mögen, diese in ein Action verwandeln können Sie auf dem Controller oder der Auslösewerte wie so

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; 
    } 
} 

die Sie dann wiederum den Einsatz gelten:

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

Hallo Olle, danke für deine Antwort. Eine Sache, die ich nicht verstanden habe, ist, wie ein ViewData ["MasterfileToUser"] die Master-Datei widerspiegelt? Ist das etwas anderes, was ich tun sollte, damit die Master-Datei korrekt geladen wird? – zanona

+1

Meine schlechte Zuordnung aus viewdata wird nicht funktionieren. Ich habe einen zweiten Stich gemacht, aber ich bin momentan nicht irgendwo, wo ich das testen kann. In OnActionExected das Ergebnis (eine ViewResult-Instanz) ist verfügbar es hat eine Masterpage-Eigenschaft, so dass ich es jetzt dort zuweisen. Bitte testen Sie sich selbst :) – olle

+0

Olle Nur eine Think hier ... Jetzt jedes Mal, wenn ich die Methode RedirectToAction aufrufen, wirft es einen Fehler: Kann nicht Objekt des Typs 'System.Web.Mvc.RedirectToRouteResult' zu Typ 'System.Web. Mvc.ViewResult '. Und acuses die MasterFileFileAttribute-Klasse. Irgendwelche Ideen, wie man es löst? Danke – zanona