2009-09-13 6 views
5

Per caso, esiste un modo semplice per impostare un MasterView predefinito per tutte le azioni all'interno di un controller specifico?ASP.NET MVC - Impostare la Vista Master di conseguenza con il Controller

per esempio se ho la HomeController voglio tutte le azioni al suo interno in possesso del Site.master come default, ma se sono dentro AccountsController voglio tutta l'azione di ereditare il Admin. Maestro e così via ..

sono riuscito a farlo con:

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

Ma in questo modo devo applicarlo ogni volta che chiamo il metodo View.

ero alla ricerca di qualcosa di più semplice come su binari in cui possiamo dichiarare:

class HomeController < ApplicationController 

    layout 'site' 

    def index 
    end 

    def create 
    ... 

end 

class AccountsController < ApplicationController 

    layout 'admin' 

    def index 
    end 

    def create 
    ... 

end 

è possibile?

Grazie in anticipo

risposta

6

Si potrebbe sovrascrivere OnActionExecuting in quella classe Controller.

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

O se volete potete trasformare questo in un ActionFilterAttribute è possibile applicare sul controller o l'azione di livello

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

che allora in uso volta in questo modo:

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

Hi Olle, grazie per la tua risposta. Solo una cosa che non ho catturato, è come un ViewData ["MasterfileToUser"] riflette il file Master? È tutto ciò che dovrei fare per farlo caricare correttamente il Master File? – zanona

+1

Il mio cattivo assegnarlo da viewdata non funzionerà. Ho fatto una seconda pugnalata ma al momento non sono da qualche parte dove posso testare questo. In OnActionExecuted il risultato (un'istanza ViewResult) è disponibile ha una proprietà Masterpage, quindi ora lo sto assegnando. Per favore, mettiti alla prova :) – olle

+0

Olle Un solo pensiero qui ... Ora ogni volta chiamo il metodo RedirectToAction genera un errore: Impossibile eseguire il cast dell'oggetto di tipo 'System.Web.Mvc.RedirectToRouteResult' per digitare 'System.Web. Mvc.ViewResult'. E acuisce la classe MasterFileFileAttribute. Qualche idea su come risolverlo? Grazie – zanona