如何使用代码隐藏从站点地图 select SiteMapNode?
How to select a SiteMapNode from sitemap using code behind?
我正忙于在 ASP.Net 中构建自己的自定义导航页面。我正忙着用我的 web.sitemap
文件中的特定 SiteMapNode
填充 <asp:Repeater>
的数据。
这是我的 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" />
我正在尝试使用 OnItemDataBound
方法在后面的代码中填充 <asp:Repeater>
,如下所示:
protected void rptMenu_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
SiteMapNode homeNode = ???;
((Repeater)e.Item.FindControl("rptMenu")).DataSource = homeNode;
((Repeater)e.Item.FindControl("rptMenu")).DataBind();
}
我唯一的问题是如何使用 title
home
?
将 homeNode
SiteMapNode
设置到 SiteMapNode
经过一些改动和一些研究,我找到了使用 SiteMap.Provider.FindMapNodeFromKey(key)
方法的解决方案。其中 key
是 web.sitemap
节点的 url
。
我还意识到我不应该使用 OnItemDataBound
方法来设置我的 rptMenu
的 DataSource
。所以我在 Page_Load
方法中做了。
因此,这是我的工作 Page_Load
代码:
var homeNode = SiteMap.Provider.FindSiteMapNodeFromKey("~/Secure/Maintenance");
rptMenu.DataSource = homeNode.ChildNodes;
rptMenu.DataBind();
我正忙于在 ASP.Net 中构建自己的自定义导航页面。我正忙着用我的 web.sitemap
文件中的特定 SiteMapNode
填充 <asp:Repeater>
的数据。
这是我的 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" />
我正在尝试使用 OnItemDataBound
方法在后面的代码中填充 <asp:Repeater>
,如下所示:
protected void rptMenu_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
SiteMapNode homeNode = ???;
((Repeater)e.Item.FindControl("rptMenu")).DataSource = homeNode;
((Repeater)e.Item.FindControl("rptMenu")).DataBind();
}
我唯一的问题是如何使用 title
home
?
homeNode
SiteMapNode
设置到 SiteMapNode
经过一些改动和一些研究,我找到了使用 SiteMap.Provider.FindMapNodeFromKey(key)
方法的解决方案。其中 key
是 web.sitemap
节点的 url
。
我还意识到我不应该使用 OnItemDataBound
方法来设置我的 rptMenu
的 DataSource
。所以我在 Page_Load
方法中做了。
因此,这是我的工作 Page_Load
代码:
var homeNode = SiteMap.Provider.FindSiteMapNodeFromKey("~/Secure/Maintenance");
rptMenu.DataSource = homeNode.ChildNodes;
rptMenu.DataBind();