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 |