我已经开始使用新的ASP.NET 4 WebForm应用程序了。默认情况下,Site.Master文件包含以下菜单:
<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal">
<Items>
<asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home"/>
<asp:MenuItem NavigateUrl="~/About.aspx" Text="About"/>
</Items>
</asp:Menu>
此菜单包含两个块:“Home”和“About”。我喜欢这种结构。但是,我想根据我的Web.sitemap文件的内容填充NavigationMenu
。目前,此文件如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode>
<siteMapNode url="/Default.aspx" title="Home" description=""></siteMapNode>
<siteMapNode url="/Products/List.aspx" title="Products" description=""></siteMapNode>
</siteMapNode>
</siteMap>
我将NavigationMenu
代码更改为如下所示:
<asp:SiteMapDataSource ID="mySiteMapDataSource" runat="server" />
<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" DataSourceID="mySiteMapDataSource" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal" />
我的问题是,这种方法会创建一个代表菜单的小块。当用户将鼠标悬停在此时,两个子菜单项将显示“Home”和“Products”。奇怪的是,web.sitemap文件只允许一个siteMapNode
作为siteMap
元素的子项。我如何使“Home”和“Products”以“Home”和“About”的方式出现,同时让我灵活地使用站点地图?
谢谢!
答案 0 :(得分:3)
对我来说ShowStartingNode =“false”效果更好。
答案 1 :(得分:2)
您可以使用 SitemapDataSource 控件的 StartingNodeOffset 属性来调整公开的站点地图层次结构的哪个部分。在你的情况下,如果你把它设置为1,一切都应该没问题。
答案 2 :(得分:0)
你应该抛弃asp:Menu并使用ListView迭代站点地图并生成你自己的菜单。我会使用标准的ul标签。然后打上&#34; li&#34;,&#34; ul&#34;和&#34; a&#34;用于造型。
<asp:ListView ID="lvMenuList" DataSourceID="SiteMapDataSource1" runat="server">
<LayoutTemplate>
<li runat="server" />
</LayoutTemplate>
<ItemTemplate>
<li> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("Url") %>'><span><%# Eval("Title") %></span></asp:HyperLink>
<asp:ListView ID="ListView2" runat="server" DataSource='<%# ((SiteMapNode) Container.DataItem).ChildNodes %>' >
<LayoutTemplate>
<ul><li runat="server" /></ul>
</LayoutTemplate>
<ItemTemplate>
<li> <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl='<%# Eval("Url") %>'><span><%# Eval("Title") %></span></asp:HyperLink> </li>
</ItemTemplate>
</asp:ListView>
</li>
</ItemTemplate>
</asp:ListView>
这将处理两个级别的站点地图文件,如果您有3个级别,则必须添加其他列表视图。
此外,你可以有两个以上的关卡,这里有一个指向msdn的链接,它显示了一个使用3个级别的问题:https://msdn.microsoft.com/en-us/library/yy2ykkab%28v=vs.140%29.aspx