| |

ASP.NET, WebServices u. RemotingRe: Abbildung von Menüstrukturen | |  | Autor: Drapondur | Datum: 02.03.09 19:02 |
| Hallo,
Mein Vorschlag sieht so aus:
Zunächst einmal musst Du alle Anchor-Tags duch asp:hyperlinks ersetzen, damit man sie vom Code aus ansprechen kann. Dann kannst Du die Style-Sheet-Zuweisung nicht mehr mit id="akt" machen, sondern Du musst eine CSS-Klasse definieren. (ASP.NET benennt die ID's um, wenn Sie in die Seite gerendert werden).
Dann kannst Du im Codebehind für alle Links prüfen, ob ihre NavigateUrl-Eigenschaft mit der aktuellen Seite überienstimmt. Ist dies der Fall, dann setzt die die CssClass-Eigenschaft auf den CSS-Klassennamen für einen ausgewählten Link (z.B. link.CssClass = "akt"). Bevor Du lange suchst: Vergleiche NavigateUrl mit Request.AppRelativeCurrentExecutionFilePath. Damit dieser Vergleich klappt müssen die NavigateUrls relativ, mit einer Tilde vorangestellt, angegeben sein (<asp:hyperlink navigateurl="~/default.aspx">)
Ähnlich verfährst Du mit den Untermenüpunkten. Du platzierst sie innerhalb eines Containers (z.B. in einem Panel oder in einem <ul id="ulCtrl" runat="server">). Dieses Container machst Du in Abhängigkeit von der aktuellen Seite sichtbar.
Es bietet sich an das ganze während der Datenbindung zu erledigen. Versehe Dein oberstes ul-Tag mit runat=server und rufe dann im PageLoad immer UlNavi.DataBind() auf.
Ein einzelner Link könnte dann so aussehen:
<asp:HyperLink ID="lnkHome" runat="server"
NavigateUrl="~/default.aspx"
CssClass='<%#GetCss(lnkHome) %>'>
Home
</asp:HyperLink> wobei GetCss() im Code-Behind als Protected Function GetCss(ByVal lnk As HyperLink) As String definert ist.
Ein Container für ein Untermenü könnte so aussehen:
<ul id="UlHomeSubMenu" runat="server"
visible='<%# GetUlSubVisible(lnkHome, UlHomeSubMenu) %>'>
... Untermüpunkte .... Die Funktionen:
Protected Function GetCss(ByVal lnk As HyperLink) As String
Dim linkUrl As String = lnk.NavigateUrl
Dim pageUrl As String = Request.AppRelativeCurrentExecutionFilePath
If linkUrl.Equals(pageUrl, StringComparison.OrdinalIgnoreCase) Then
Return "selected"
Else
Return ""
End If
End Function
Protected Function GetUlSubVisible(ByVal topLink As HyperLink, ByVal ul As _
HtmlGenericControl) As Boolean
Dim pageUrl As String = Request.AppRelativeCurrentExecutionFilePath
Dim linkUrl As String = topLink.NavigateUrl
If linkUrl.Equals(pageUrl, StringComparison.OrdinalIgnoreCase) Then
Return True
End If
For Each ctrl As Control In ul.Controls
Dim lnk As HyperLink = TryCast(ctrl, HyperLink)
If lnk Is Nothing Then Continue For
linkUrl = lnk.NavigateUrl
If linkUrl.Equals(pageUrl, StringComparison.OrdinalIgnoreCase) Then
Return True
End If
Next
Return False
End Function Und nicht vergessen: DataBind im Page-Load aufrufen.
Ciao
D.
Beitrag wurde zuletzt am 02.03.09 um 19:03:49 editiert. |  |
 | 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 |
  |
|
sevWizard für VB5/6 
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere InfosTipp des Monats Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2025 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
|
|