2008-11-07 11 views
5

Mam wymóg obsługi różnych stron wzorcowych w mojej aplikacji (ASP.NET MVC). Jaki jest zalecany sposób:Dynamicznie zmieniając szablon główny w ASP.NET MVC

  1. Przekaż nazwę strony wzorcowej do widoku z.
  2. Zapisuj stronę wzorcową (w sesji lub coś w tym stylu), aby była zapisana podczas wizyty użytkownika.

Odpowiedz

9

Użyj kontrolera zwyczaj bazową i dziedziczą po nim zamiast:

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 

mogę ustawić zmienną sesji w session_start global.asax:

Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) 

//programming to figure out your session 
Session("MasterPage")="MyMasterPage" 

End Sub 
+0

Jest to doskonała odpowiedź, aby zaktualizować ją nieznacznie w MVC3, można również teraz utworzyć niestandardowy widok maszynki Razor View Engine, który może być bardziej przejrzysty: http: // weblogs .asp.net/imranbaloch/archive/2011/06/27/view-engine-with-dynamic-view-location.aspx – Liam

0

można podać nazwę strony wzorcowej do sesji, ale sesje są niewiarygodne. polecam zamiast tego rzucić go w db.

Gdy jesteś na stronie, możesz zmienić/ustawić stronę wzorcową, otwierając plik page.masterpage. to ciąg; wystarczy podać nazwę .master w.

-2

Dlaczego nie zachować strony wzorcowej w profilu użytkownika? Następnie po prostu zmień to na zdarzenie PreLoad.

http://www.odetocode.com/articles/440.aspx

+0

używam ASP .NET MVC. Czy administrator nie powinien decydować, z której strony korzystać? – pgb

+0

tak. Prawdopodobnie powinieneś użyć kontrolera bazowego. –

+0

Pytanie dotyczy wyłącznie ASP.NET MVC, a nie ASP.NET – Suhas