Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[gelöst] Webseite Menu dynamisch Links mit XML einfügen
Myar
myCSharp.de - Member



Dabei seit:
Beiträge: 32

Themenstarter:

[gelöst] Webseite Menu dynamisch Links mit XML einfügen

beantworten | zitieren | melden

verwendetes Datenbanksystem: <XML/MySQL>

Hallöchen!

Ich versuche gerade in einer ASP.NET Seite ein dynamsiches Menu aufzubauen.
Und zwar gibt es ca. fünf verschiedene Varianten, wie das Menu aufgebaut sein kann.
Also dachte ich mir, ich baue diese Varianten in eine XML Datei (ich habe damit meine erste XML Datei überhaupt erstellt) und lasse das Menu erstellen, je nachdem wie der Status der Seite ist.

Nach Recherche im INternet konnte ich zum Beispiel leider nicht herausfinden, wie ich Hyperlinks im XML defieniere, oder am besten gleich ASP Hyperlinks.

Dann versuche ich die XML Datei einzulesen, doch es passiert gar nichts.
Ich glaube, meine Vorgehensweise ist wohl komplett falsch... hier mal Code:

Die XML Datei:
(noch unvollständig)
<?xml version="1.0" encoding="utf-8" ?>
<Menu>
  <loggedout>
       Hauptmenü
      <link name="Registrieren" url="login.aspx?showpage=login">Registrieren</link>
      <link name="Passwort vergessen" url="login.aspx?showpage=pwvergessen" />
      <link name="Anmelden" url="login.aspx?showpage=anmelden" />
    
    Support
    Neuigkeiten
    FAQ
    Forum
    Ticketsystem
  
  </loggedout>
<loggedinnochar>
  ~ Charakter ~
Charakter erschaffen
</loggedinnochar>
etc...
</Menu>

Dann die Stelle in der Master Page wo das rein soll:
<div id="navi"> <!--Navigation links-->
			    <div id="navi_content" class="clearfix">
                    <asp:Label ID="navi_cont" runat="server"></asp:Label>
                  </div>
		    </div>

Und der Code zum befüllen des Labels:

protected void menu()
    {
        XElement menu1 = XElement.Load("C:/inetpub/wwwroot/xml/menu.xml");
        foreach(XElement menu in menu1.Elements())
          navi_cont.Text = menu1.Element("loggedout").Value;
        
    }

Habe mir gedacht, durch if Abfragen, kann ich zwischen den Tags switchen und so das Menu halt ändern lassen...

Wird wohl schon allein daran scheitern, das in das Label keine Links können? I dont know...

Gruß
Myar
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Myar am .
private Nachricht | Beiträge des Benutzers
Myar
myCSharp.de - Member



Dabei seit:
Beiträge: 32

Themenstarter:

beantworten | zitieren | melden

Okay, ich habe es (zum Teil) hinbekommen (mit etwas Hilfe).

Gibt aber immer noch ein kleines Problem..

Der Code sieht nun so aus:

private void loadMenu()
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(@"C:/inetpub/wwwroot/xml/menu.xml");

        XmlNodeList elemList = doc.GetElementsByTagName("loggedout");
        for (int i = 0; i < elemList.Count; i++)
        {
            foreach (XmlNode el2 in elemList[i].ChildNodes)
            {
                if (el2.Name == "siteMapNode")
                {
                    // ... Hauptmenütitelanzeigen
                    navi_cont.Text = "<p>" + el2.Attributes["title"].Value + "</p>";
                    loadLinks(el2.ChildNodes); //Links anzeigen
                    
                }
            }
        }
    }

    private void loadLinks(XmlNodeList mainMenus)
    {
        foreach (XmlNode el2 in mainMenus)
        {
            if (el2.Name == "link")
            {
                navi_cont.Text = "<p><a href='" + el2.Attributes["url"].Value + "'>" + el2.Attributes["title"].Value + "</a></p>";
            }
        }
    } 

Dazu die XML nochmal (leicht geändert):
<?xml version="1.0" encoding="utf-8" ?>
<Menu>
  <loggedout>
      <siteMapNode title="~Hauptmenü~" description="Hauptmenü">
          <link title="Registrieren" url="?showpage=registrieren" />
          <link title="Passwort vergessen" url="?showpage=pwvergessen" />
          <link title="Anmelden" url="?showpage=anmelden" />
      </siteMapNode>
      <siteMapNode title="Support" url="">
            <link title ="Neuigkeiten" url="" />
            <link title="FAQ" url="" />
            <link title="Forum" url="" />
            <link title="Ticketsystem" url="?showpage=ticket" />
      </siteMapNode>
  </loggedout>
  <loggedinnochar>
    <siteMapNode title="Support">
      <siteMapNode title ="Neuigkeiten" />
      <siteMapNode title="FAQ" />
      <siteMapNode title="Forum" />
      <siteMapNode title="Ticketsystem" />
    </siteMapNode>
  </loggedinnochar>
</Menu>

Nun ist es aber so, dass mir nur das letzte Element angezeigt wird. Also anscheinend die Zeile immerwieder überschrieben und somit das Label nur mit einer Zeile überschrieben.
Schöner wäre aber, wen alle Elemente innerhalb von z.B. <loggedout> angezeigt werden würden.

Weiß wer Rat?

Gruß
Myar
private Nachricht | Beiträge des Benutzers
macmark
myCSharp.de - Member



Dabei seit:
Beiträge: 53
Herkunft: Köln

beantworten | zitieren | melden

Hi Myar,
so wie ich das sehe muss in loadLinks das "navi_cont.Text = " durch "navi_cont.Text += " ersetzt werden damit nicht nur das letzte Element angezeigt wird.
Gruss
Markus
private Nachricht | Beiträge des Benutzers
Myar
myCSharp.de - Member



Dabei seit:
Beiträge: 32

Themenstarter:

beantworten | zitieren | melden

Hallöchen Markus!

Hat geklappt, vielen Dank für die Hilfe!

Gruß
Myar
private Nachricht | Beiträge des Benutzers