pgb
pgb

Reputation: 25001

Dynamically changing Master Template in ASP.NET MVC

I have the requirement to support different Master pages on my application (ASP.NET MVC). What is the recommended way to:

  1. Pass the master page name to the view from.
  2. Store the master page (in session, or something) so it sticks during a user's visit.

Upvotes: 5

Views: 5456

Answers (3)

Bruno Shine
Bruno Shine

Reputation: 1031

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

Upvotes: -2

Slee
Slee

Reputation: 28248

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

Upvotes: 9

Reputation:

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.

Upvotes: 0

Related Questions