问题
I have the requirement to support different Master pages on my application (ASP.NET MVC). What is the recommended way to:
- Pass the master page name to the view from.
- Store the master page (in session, or something) so it sticks during a user's visit.
回答1:
Use a custom base controller and inherit from it instead:
Public Class CustomBaseController
Inherits System.Web.Mvc.Controller
Protected Overrides Function View(ByVal viewName As String, ByVal masterName As String, ByVal model As Object) As System.Web.Mvc.ViewResult
Return MyBase.View(viewName, Session("MasterPage"), model)
End Function
End Class
I set my Session variable in the global.asax Session_Start:
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
//programming to figure out your session
Session("MasterPage")="MyMasterPage"
End Sub
回答2:
you could throw the master page name into the session, but sessions are unreliable. i'd recommend throwing it in a db instead.
once you're in the page, you can change/set the master page by accessing page.masterpagefile. it's a string; just pass the .master name in.
回答3:
Why not keep the Master Page on the user profile? Then just change it on the PreLoad event.
http://www.odetocode.com/articles/440.aspx
来源:https://stackoverflow.com/questions/272313/dynamically-changing-master-template-in-asp-net-mvc