Как выбрать SiteMapNode из карты сайта, используя код позади?
Я занят созданием своей собственной пользовательской страницы навигации в ASP.Net. Я занят, пытаясь заполнить <asp:Repeater>
данные с конкретным SiteMapNode
от моего web.sitemap
файл.
Вот мой web.sitemap
:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode roles="*">
<siteMapNode url="~/Secure/Home" title="Home">
<!-- Home SiteMapNodes -->
</siteMapNode>
</siteMapNode url="~/Secure/Maintenance title="maintenance">
<!-- Maintenance SiteMapNodes -->
</siteMapNode>
</siteMapNode>
</siteMap>
На моей домашней странице навигации у меня установлен следующий репитер:
<ul>
<asp:Repeater runat="server" ID="rptMenu" DataSourceID="smdsMain" OnItemDataBound="rptMenu_ItemDataBound">
<ItemTemplate>
<li>
<a runat="server" href='<%# Eval("url") %>'>
<%# Eval("title") %>
</a>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
<asp:SiteMapDataSource ID="smdsMain" runat="server" ShowStartingNode="false" SiteMapProvider="XmlSiteMapProvider" />
Я пытаюсь заполнить <asp:Repeater>
в коде позади с помощью OnItemDataBound
метод как это:
protected void rptMenu_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
SiteMapNode homeNode = ???;
((Repeater)e.Item.FindControl("rptMenu")).DataSource = homeNode;
((Repeater)e.Item.FindControl("rptMenu")).DataBind();
}
Мой единственный вопрос, как мне установить homeNode
SiteMapNode
в SiteMapNode с title
home
?
1 ответ
После некоторого измельчения и изменения и небольшого исследования я пришел к решению, используя SiteMap.Provider.FindMapNodeFromKey(key)
метод. куда key
это url
из web.sitemap
узел.
Я также понял, что я не должен использовать OnItemDataBound
способ установить мой rptMenu
"s DataSource
, Так я и сделал в Page_Load
метод.
В результате вот моя работа Page_Load
код:
var homeNode = SiteMap.Provider.FindSiteMapNodeFromKey("~/Secure/Maintenance");
rptMenu.DataSource = homeNode.ChildNodes;
rptMenu.DataBind();