2009-03-10 18 views

Antwort

2

Es gibt eine vernünftige, wartbare Lösung, die unter http://forums.asp.net/p/1394235/2991293.aspx diskutiert wird, wo Sie einen Stamm-Master-Nachfolger erstellen und diesen für alle Ihre eigenen Ansichten verwenden. Es gibt auch einen CodeProject-Eintrag, der interessant aussieht, der eine benutzerdefinierte ViewEngine um http://www.codeproject.com/KB/aspnet/ASPNETMVCDynamicThemes.aspx verwendet.

Ich muss das auch tun, aber ich habe noch keine Lösung ausprobiert, also habe ich noch kein Gefühl dafür, was insgesamt besser ist. IMO, dynamisches Skinning ist ein entscheidendes Feature für MVC, insbesondere um die Benutzerpersonalisierung zu berücksichtigen.

+0

Ist das dynamische Skinning nicht 'CSS'? :-D –

+0

George, CSS wäre Teil davon, aber personalisierte oder angepasste Ansichten könnten definitiv übertreffen, was CSS bieten kann. –

8

Sie können den Namen der Masterseite angeben, wenn die View() Helfer-Methode:

return View("About", "AlternateMaster", model); 

AlternateMaster zu ~/Ansichten lösen würde/Shared/AlternateMaster.master

Found this here

3

Ich habe dies zum Laufen gebracht, indem ich einen Basis-Controller erstellt habe, der das OnActionExecuted-Ereignis behandelt hat. Im OnActionExecutedevent ordne ich die Masterseite zu. Dann habe ich alle meine anderen Controller von der Basisklasse geerbt.

public class BaseController : Controller 
{ 
    protected override void OnActionExecuted(ActionExecutedContext filterContext) { 
     var action = filterContext.Result as ViewResult; 
     if (action != null) { 
      action.MasterName = MyApp.Properties.Settings.Default.Theme; 
     } 

     base.OnActionExecuted(filterContext); 
    } 
} 

I wrote a post about this, wenn Sie mehr Detail

+0

Jetzt funktioniert das gut, aber wenn Sie untergeordnete Aktionen verwenden, wird es fehlschlagen, da es auch die Masterpage auf der Kindaktion setzt! – Androme