Har kollat runt om jag kan lösa följande problem men kan inte hitta nåt om det. Det jag vill göra är följande: Hej, Jag har kommit en bit på vägen, min kod ser ut så här: Jag behöver verkligen hjälp med detta. Jag ahr alltså den här koden: Hej, Borde det inte gå att få ut titel och url på nåt enklare sätt från den nod man är på? Man kan ju kolla om noden har childnodes, då borde man ju kunna fåt ut dom på nåt sätt också. Magnus, menar du "få ut titel och url" för currentNode? Det går. genom SiteMap.CurrentNode.Url eller .Title Nja inte riktigt. Jag menar att eftersom jag står i current node och kan kolla om current node har child nodes så måste jag väl kunna få ut dessa child nodes ganska enkelt? Et exempel, säg att min SiteMap ser ut så här: aha, Sorry, jag hade klickat i fel. Har rättat till det. Tackar för hjälpen också:)Meny med Sitemap?
Ha en huvudmeny denna ska inte visa några underkategorier, sen när jag kommer in på en sida som har underkategorier ska dessa visas i en annan meny. Huvudmenyn ska hela tiden se likadan ut, den ska även ligga skiljd från undermenyn. Jag vill kunna göra detta med hjälp av Sitemap. Är det möjligt i så fall hur gör jag det?Sv: Meny med Sitemap?
Du kan göra väldigt mycket med SiteMap(Node), men det kan vara krångligt i början.
Jag har löst det på det sättet först binder jag RootNode.ChildNodes till en repeater och i ItemDatabound så kollar jag om node == CurrentNode eller om node är "IsDescendantOf()" som kollar om noden är i samma hierarki. Om det stämmer, så binder man node.ChildNodes till sub-menyn.
Hoppas att du förstår hur jag menar, kan visa kodexempel om du även vill se det.
/mSv: Meny med Sitemap?
<code>
string myString = "";
string myCheck = SiteMap.CurrentNode.ToString();
lblSubMenu.Text = "<span class='boldText'>" + myCheck.ToString() + "</span><p></p>";
// What nodes are children of the CurrentNode?
if (SiteMap.CurrentNode.HasChildNodes)
{
IEnumerator childNodesEnumerator = SiteMap.CurrentNode.ChildNodes.GetEnumerator();
myString = "<ul class='regText'>";
while (childNodesEnumerator.MoveNext())
{
// Prints the Title of each node.
myString += "<li>" + (childNodesEnumerator.Current.ToString()) + "</li>";
}
myString += "</ul>";
lblSubMenu.Text += myString.ToString() + "<br />";
}
</code>
Hur få jag ut länken? Den ligger ju i url i sitemap. Kan man på nåt sätt lägga detta i en klass så man slipper skriva koden flera gånger? Jag ahr inte fått det att fungera. Skulle man kanske kunna få den bunden till en treeview?Sv:Meny med Sitemap?
<code>
if (SiteMap.CurrentNode.HasChildNodes)
{
if (SiteMap.CurrentNode.HasChildNodes)
{
IEnumerator childNodesEnumerator = SiteMap.CurrentNode.ChildNodes.GetEnumerator();
while (childNodesEnumerator.MoveNext())
{
// Prints the Title of each node.
Response.Write(childNodesEnumerator.Current.ToString() + "<br />");
}
}
Response.Write("<hr />");
}
else
lblSubmenu.Text = "Det finns inga underkategorier.";
</code>
Med denna kod har jag fått ut titeln på länkarna, men hur gör jag för att få ut urlen så jag kan göra länkar till dom?Sv: Meny med Sitemap?
Nu skriver jag från huvudet eftersom jag inte har min kod här så det kanske blir lite fel (är även lite trött :o)
Sidan med repeatern
<asp:Repeater id="myNavigation" runat="server">
<ItemTemplate>
<asp:HyperLink id="navLink" runat="server" />
</ItemTemplate>
</asp:Repeater>
...
<asp:Repeater id="mySubNavigation" runat="server">
<ItemTemplate>
<asp:HyperLink id="subnavLink" runat="server" />
</ItemTemplate>
</asp:Repeater>
Sedan i din code-behind:
void OnPreInit(...) {
this.myNavigation.ItemDataBound += new RepeaterItemEventHandler(myNavigation_ItemDataBound);
this.mySubNavigation.ItemDataBound += new RepeaterItemEventHandler(mySubNavigation_ItemDataBound);
}
void Page_Load(...) {
this.myNavigation.DataSource = SiteMap.RootNode.ChildNodes;
this.myNavigation.DataBind();
}
void myNavigation_ItemDataBound(...) {
SiteMapNode node = (SiteMapNode)e.Item.DataItem;
HyperLink hpl = (HyperLink)e.Item.FindControl("navLink");
hpl.Text = node.Title;
hpl.NavigateUrl = node.Url;
if (SiteMap.CurrentNode == node ||
node.IsDescendantOf(SiteMap.CurrentNode) {
this.mySubNavigation.DataSource = node.ChildNodes;
this.mySubnavigation.DataBind();
// sätter även en en cssclass för att göra noden "aktiv"
hpl.CssClass = "navActive";
}
}
void mySubNavigation_ItemDataBound(...) {
SiteMapNode node = (SiteMapNode)e.Item.DataItem;
HyperLink hpl = (HyperLink)e.Item.FindControl("subnavLink");
hpl.Text = node.Title;
hpl.NavigateUrl = node.Url;
}
Man kan givetvis göra så här i oändligheten men nu visar jag bara level 1 och 2. För att visa rootnoden så kan du enkelt skapa en HyperLink som är utanför repeatern som du sedan sätter rootNode.Text = SiteMap.RootNode.Title;
rootNode.NavigateUrl = SiteMap.RootNode.Url;
Hoppas jag inte gjorde allt för många fel ;-)
/m
Sv:Meny med Sitemap?
Sv: Meny med Sitemap?
/mSv:Meny med Sitemap?
<code>
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title="" description="">
<siteMapNode url="~/default.aspx" title="START" description="Till förstasidan." />
<siteMapNode url="~/company/default.aspx" title="Företaget" description="Information om företaget.">
<siteMapNode url="~/company/aboutUs.aspx" title="Om oss" description="Information om företaget." />
<siteMapNode url="~/company/personal.aspx" title="Personal" description="Information om vår personal." />
</siteMapNode>
<siteMapNode url="~/service/default.aspx" title="Tjänster" description="Information om våra tjänster.">
<siteMapNode url="~/service/develop.aspx" title="Webbutveckling" description="Information om webbutveckling." />
</siteMapNode>
<siteMapNode url="~/contact/default.aspx" title="Kontakt" description="Information om hur du kontaktar oss." />
<siteMapNode url="~/news/default.aspx" title="Nyheter" description="våra nyheter.">
<siteMapNode url="~/news/archive.aspx" title="Nyhetsarkiv" description="Vårt nyhetsarkiv." />
</siteMapNode>
<siteMapNode url="~/shop/default.aspx" title="Butiken" description="Vår butik." />
<siteMapNode url="~/logIn.aspx" title="Logga in" description="Här loggar du in." />
</siteMapNode>
</siteMap>
</code>
Säg nu att jag står på sidan "Företaget", den har ju två child nodes. Hur kan jag få ut dem? Det jag behöver är alltså titel och url. Står jag sedan på sidan "Butiken" ska det inte hämtas nåt eftersom den inte har några child nodes. Kolla om det finns child nodes vet jag hur man gör, men hur kommer jag åt dessa child nodes om det finns några och hur kan jag komma åt just titel och url på dem?Sv: Meny med Sitemap?
Du kan få ut dem via ChildNodes som även den är en property (SiteMap.CurrentNode.ChildNodes) som returnerar en Collection av SiteMapNodes som du kan binda till en repeater, köra en foreach etc etc.
/mSv:Meny med Sitemap?