vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ASP.NET, WebServices u. Remoting
Re: Contentplaceholder dynamisch verändern in der Masterpage 
Autor: Jojo
Datum: 24.03.12 10:45

Hey Micke,

um es verweg zu nehmen - Die Idee ist Spitze!

Bei der Umsetztung hängt es aber im Detail. Dazu muss ich wohl etwas mehr ins Detail gehen:

Ich lasse die Layouts von einem Design-Programm erstellen (Artisteer). Das Teil ist Super und kann extrem viel. Was ich Programmiere ist ein Webshop-System wo die Benutzer sich selbst die Layouts in Artisteer erstellen können und diese hochladen. Wie gesagt - das Teil ist extrem flexibel und das ist genau das Problem was ich habe. Je nachdem ob Du z.B: die Navigation über oder unter dem Kopf haben möchtest muss natürlich der Content an einer anderen Stelle stehen.

Das Problem kann ich mit Deinem Beispiel super lösen. Ich hänge einfach unten an die Seite 4 Divs dran und lade da die ContentplaceHolder rein. Die Inhalte verschiebe ich dann an die richtige Stelle

   <form id="form1" runat="server">
<div id="DivMenuContentPlaceHolder" runat="Server"><asp:ContentPlaceHolder _
  ID="MenuContentPlaceHolder" runat="server" /></div>
 <div id="DivHeaderContentPlaceHolder" _
 runat="Server"><asp:ContentPlaceHolder ID="HeaderContentPlaceHolder" _
 runat="server" /></div>
 <div id="DivSidebar1ContentPlaceHolder" _
 runat="Server"><asp:ContentPlaceHolder ID="Sidebar1ContentPlaceHolder" _
 runat="server"/></div>
 <div id="DivSheetContentPlaceHolder" runat="Server"><asp:ContentPlaceHolder _
 ID="SheetContentPlaceHolder" runat="server"/></div>
</form1>
Das Artisteer erstellt eine fertige MasterPage. Diese lese ich ein und speicher mir den Inhalt in der Datenbank. Das blöde ist, dass der Aufbau der DIVs sich auch verändert. Deshalb kann ich die DIV nicht in der Masterpage anlegen sonder muss die auch über Innterhtml laden - in die Form1

 form1.innerhtlm = MasterHTMLcode
Die DIVs für die CPH können sich - je nach erstellem Layout - verändern.

Z.B:
<div class="art-nav-inner">
	<asp:contentplaceholder id="MenuContentPlaceHolder" _
  runat="server"></asp:contentplaceholder>
</div>
oder
<div class="art-nav-outer">
	<asp:contentplaceholder id="MenuContentPlaceHolder" _
  runat="server"></asp:contentplaceholder>
</div>
Ich muss jetzt ermitteln in welches DIV welcher MenuContentPlaceHolder muss. Das klappt auch noch.

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim Master_HTML() As String = Split(Session("Master"), _
          "<asp:contentplaceholder id=" & Chr(34))
        Dim CPH(0 To 4) As String, DIV(0 To 4) As String, CPH_InnerHtml(0 To 4) _
        As String
        For I = 1 To UBound(Master_HTML) - 1
            'Name des Contenplaceholders ermitteln
            CPH(I) = Left(Master_HTML(I), InStr(Master_HTML(I), Chr(34)) - 1)
            'Name des DIV Elements ermitteln
            DIV(I) = Master_HTML(I - 1).Replace(Chr(34) & ">", "")
            DIV(I) = Trim(Right(DIV(I), Len(DIV(I)) - InStrRev(DIV(I), Chr( _
              34))))
            'ContentPlaceholder Source entfernen
            Master_HTML(I) = Right(Master_HTML(I), Len(Master_HTML(I)) - InStr( _
              Master_HTML(I), "</asp:contentplaceholder>") - 24)
        Next I
    End Sub
Ich habe jetzt in CPH() die Namen der Contentplacerholder und in DIV() die passenden Namen der DIVs
Jetzt muss ich noch die Inhalte der Contentplaceholer über die DIV in die CPH_InnerHTML() laden

Das klappt nicht! Hier bin ich mir nicht sicher wie das geht. Ich hatte es versucht mit so was wie:

CPH_InnerHtml(1) = CType(form1.FindControl(CPH(1)), HtmlGenericControl).InnerHtml

Aber hier ist wohl der Typ HtmlGenericControl falsch! Es kommt der Fehler:
Innerer Inhalt von DivHeaderContentPlaceHolder konnte nicht abgefragt werden, da der Inhalt nicht literal ist.

Die letzte Frage ist also:
Wie bekomme ich aus meinem DIV mit FindControl die Innerhtlm raus?

Joachim

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Contentplaceholder dynamisch verändern in der Masterpage 
Autor: Jojo
Datum: 23.03.12 10:57

Hallo,

ich habe folgendens Problem:

In einer Masterpage gibt es 4 Contentplaceholder. (CPH1-CPH4)
Die Inhalte der CPH können sich verschieben.
So soll der Benutzer z.B. auswählen können welcher Inhalt in welchen Contentplaceholder angezeigt werden soll.

Ich habe das wie folgt gelöst:

  <!-- Masterpage -->
  <form id="form1" runat="server">
   <%=Master_HTML(0)%>
   <asp:contentplaceholder id='Contentplaceholder1' runat="server" />
   <%=Master_HTML(1)%>
   <asp:contentplaceholder id='Contentplaceholder2' runat="server" />
   <%=Master_HTML(2)%>
   <asp:contentplaceholder id='Contentplaceholder3' runat="server" />
   <%=Master_HTML(3)%>
   <asp:contentplaceholder id='Contentplaceholder4' runat="server" />
   <%=Master_HTML(4)%>
  </form>
Im PreInit der Masterpage werden die ID auf die "echten" IDs gesetzt:

    Public Master_HTML() As String
    Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As _
      System.EventArgs)
        Master_HTML = Split(Session("Master"), "<asp:contentplaceholder id=")
        For I = 0 To UBound(Master_HTML) - 1
            If I = 1 Then
                Contentplaceholder1.ID = Left(Master_HTML(I), InStr(Master_HTML( _
                  I), Chr(34)) - 1)
            ElseIf I = 2 Then
                Contentplaceholder2.ID = Left(Master_HTML(I), InStr(Master_HTML( _
                  I), Chr(34)) - 1)
            ElseIf I = 3 Then
                Contentplaceholder3.ID = Left(Master_HTML(I), InStr(Master_HTML( _
                  I), Chr(34)) - 1)
            ElseIf I = 4 Then
                Contentplaceholder4.ID = Left(Master_HTML(I), InStr(Master_HTML( _
                  I), Chr(34)) - 1)
            End If
            If I > 0 Then
                Master_HTML(I) = Right(Master_HTML(I), Len(Master_HTML(I)) - _
                  InStr(Master_HTML(I), "</asp:contentplaceholder>") - 24)
            End If
        Next I
 
    End Sub
In der Session("Master") ist der jeweilige HTML Code mit den richtigen CPH enthalten.

Das Problem ist, dass mein "Page_PreInit" Event garnicht aufgerufen wird und es schon vorher zu dem Fehler komt, dass der gesuchte CPH nicht gefunden werden kann.

Wer kann mir sagen was ich anders machen muss ...

Joachim

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Contentplaceholder dynamisch verändern in der Masterpage 
Autor: Micke
Datum: 23.03.12 15:55

du kannst vom codebehind nicht direkt auf die placeholder zugreifen, da sie i.d.S. kein html element sind.
ich würde meinen cph's sind nicht dafür gedacht komplett dynamisch gefüllt zu werden.
dafür kannst du ja gewöhnliche tags nutzen.

move dein html einfach in den tag deiner wahl, statt die id's zu tauschen

Micke

Beitrag wurde zuletzt am 23.03.12 um 16:01:28 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Contentplaceholder dynamisch verändern in der Masterpage 
Autor: Jojo
Datum: 23.03.12 16:35

Hey Micke,

das geht so leider nicht. Ich muss den gesammten DIV Aufbau laden. Dazu noch die vier CPH. Wobei die vertauscht sein können.

Die einzige möglichkeit die ich noch sehe ist, es über mehrer Masterpages zu machen und dann in jeder Seite die Masterpage dynamisch zu änder auf das Masterpage Layout, dass die Contentplaceholder in der richtigen Reihenfolge hat ...

Das ist aber aus meiner Sich nur eine Schlechte Lösung, da alle evtl auftretenen Konstellationen berücksicht werden müssten

Ich habe es mit diese Beitrag versucht:
http://www.codeproject.com/Articles/17627/Really-Dynamic-Master-Pages

Aber ich bekomme es einfach nicht hin. Das Beispiel funktioniert bei mir aber in meiner Anwendung geht es nicht weil das PriInit in der Masterpage einfach nicht ausgeführt wird.

Joachim

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Contentplaceholder dynamisch verändern in der Masterpage 
Autor: Micke
Datum: 23.03.12 19:20

Hi Jojo,

noch hab ich nicht geschluckt worüber du stolperst.
du schreibst die inhalte der cph können sich verschieben.

nehmen wir an du hast
<div id="Div1" runat="server">
                        <asp:ContentPlaceHolder ID="ContentPlaceHolder2" _
                          runat="server" />
</div>
<div id="Div2" runat="server">
                        <asp:ContentPlaceHolder ID="ContentPlaceHolder3" _
                          runat="server" />
</div>
wenn du jetzt schreibst
div1.InnerHtml = Div2.InnerHtml
Div2.InnerHtml = string.empty

hast du quasi den ContentPlaceHolder3 verschoben, und sein inhalt steht jetzt dort wo vorher ContentPlaceHolder2 stand.

Nicht ?

Micke

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Contentplaceholder dynamisch verändern in der Masterpage 
Autor: Micke
Datum: 27.03.12 11:39

Hallo Joachim,

"Wie bekomme ich aus meinem DIV mit FindControl die Innerhtlm raus"
weiß ich auch nicht gerade ausm Kopf

Es scheint als ob deine contentplaceholder letztendlich eher userControls sind, schonmal überlegt diese als baustein zu benutzen (lassen) ? Dürfte der Handhabung der Dynamik zuträglich sein.

Micke

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Contentplaceholder dynamisch verändern in der Masterpage 
Autor: Jojo
Datum: 27.03.12 12:02

Hallo Micke,

ich habe es in der Zwischenzeit rausgefunden wie es geht ...

        Dim sb = New StringBuilder()
        form1.FindControl("Div" & CPH(1)).RenderControl(New HtmlTextWriter(New _
          StringWriter(sb)))
        CPH_InnerHtml(1) = sb.ToString()
Das funktioniert primar - bei 3 der 4 Contentplaceholer.
Sobald der Inhalt etwas "Anspruchsvoller" wird - z.B. wenn AJAX in spiel kommt - dann klappt es nicht.
Da kommt dann immer das Problem, dass es in einem "runat=Server" Tag positioniert werden muss ...

ich habe das Thema erst mal zurückgestellt. Ist sehr Komplex.

Besten dank schon mal für Deine Mithilfe!

Joachim

Joachim

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel