none
Theme über Masterpage ändern RRS feed

  • Frage

  • Hallo,
    ich versuche gerade mich in die Welt der Designs einzuarbeiten und ein Theme zur Laufzeit zu wechseln.
    Dazu nehme ich als Unterstützung das Buch 'ASP.NET 4.0 mit VB 2010'.

    Unter anderem ist dort folgende Funktion vorgegeben:

    Protected Sub Page_PreInit(ByVal sender as Object, ByVal e As System.Eventargs)

    If Not IsNothing(Request.Cookies("layout")) then Me.Theme = Request.Cookies("layout").Value End If End Sub

    Nun hat die Funktion aber keinen Handler und die Masterpage kein PreInit-Ereignis und keine Theme-Eigenschaft.

    Funktioniert das dann überhaupt, oder muss ich das immer irgendwie über die Sub-Pages realisieren, was ich allerdings nicht so richtig glauben möchte.

    Vielleicht hat jemand einen Lösungsansatz?

    Vielen Dank.

    Volker

    Donnerstag, 26. Juni 2014 05:54

Antworten

  • Hi Volker,
    entschuldige bitte. Da war ich mit meinen Gedanken nicht bei der Sache. Im Contructor der MasterPage gib es natürlich noch keine Page, weshalb da ein Fehler kommt. Es bleibt damit nur das Aufrufen aus der WebForm-Instanz. Das kann man vereinfachen, indem vererbt wird und damit nur in einer Basisklasse die Zuweisung implementiert.

    Alternativ ist auch die Implementierung in einer Klasse mit IHttpModule möglich, die sich an der RquestHandler hängt.

    --
    Peter

    • Als Antwort markiert Volker S Montag, 30. Mai 2016 09:08
    Donnerstag, 26. Juni 2014 12:07

Alle Antworten

  • Hi Volker,
    versuch es mal so:

      Private Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init
        If Not IsNothing(Request.Cookies("layout")) Then
          Me.Page.Theme = Request.Cookies("layout").Value
        End If
      End Sub

    --
    Peter

    Donnerstag, 26. Juni 2014 08:17
  • Hallo Peter,
    danke für deine Hilfe.

    Hier kommt leider der Fehler:

    In System.InvalidOperationException ist eine Ausnahme vom Typ "System.Web.dll" aufgetreten,
    doch wurde diese im Benutzercode nicht verarbeitet.
    
    Zusätzliche Informationen: 
    Die Theme-Eigenschaft kann nur bei oder vor dem Page_PreInit-Ereignis festgelegt werden.

    So wie es aussieht, muss also ein PreInit-Eriegnis vorhanden sein.

    Viele Grüße, Volker


    • Bearbeitet Volker S Donnerstag, 26. Juni 2014 08:31
    Donnerstag, 26. Juni 2014 08:31
  • Hi Volker,
    dann die nächste Idee:

    Public Class Site1
      Inherits System.Web.UI.MasterPage
    
      Public Sub New()
        AddHandler Me.Page.PreInit, AddressOf PagePreinit
      End Sub
    
      Private Sub PagePreinit(sender As Object, e As EventArgs)
        If Not IsNothing(Request.Cookies("layout")) Then
          CType(sender, Page).Theme = Request.Cookies("layout").Value
        End If
      End Sub
    
      Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
      End Sub
    
    End Class
    --
    Peter

    Donnerstag, 26. Juni 2014 08:43
  • Hallo Peter,
    auch hier ein Fehler in der Sub New:

    In System.NullReferenceException ist eine Ausnahme
    vom Typ "App_Web_5i5humaz.dll" aufgetreten,
    doch wurde diese im Benutzercode nicht verarbeitet.
    
    Zusätzliche Informationen:
    Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Normalerweise müsste doch, die Preinit-Methode bei den Page-Ereignissen auszuwählen sein, wenn ich den Handler mit New deklariere?
    Doch da ist nichts. Oder lieg ich da falsch?


    Viele Grüße, Volker

    Donnerstag, 26. Juni 2014 09:13
  • Hi Volker,
    entschuldige bitte. Da war ich mit meinen Gedanken nicht bei der Sache. Im Contructor der MasterPage gib es natürlich noch keine Page, weshalb da ein Fehler kommt. Es bleibt damit nur das Aufrufen aus der WebForm-Instanz. Das kann man vereinfachen, indem vererbt wird und damit nur in einer Basisklasse die Zuweisung implementiert.

    Alternativ ist auch die Implementierung in einer Klasse mit IHttpModule möglich, die sich an der RquestHandler hängt.

    --
    Peter

    • Als Antwort markiert Volker S Montag, 30. Mai 2016 09:08
    Donnerstag, 26. Juni 2014 12:07
  • Hallo Peter,
    danke für deine Hilfe. Ich war die letzte Woche nicht am Platz, daher die Stille.

    Hast du evtl. einen Tipp, wie ich das mit der Vererbung am besten realisieren könnte?

    Vielen Dank.


    Viele Grüße, Volker

    Dienstag, 8. Juli 2014 05:04