3

我希望我的 ASP.NET 站点有简单的菜单字符串,也就是面包屑。我已经创建了包含所有必需元素的站点地图并注册到 Web.config。例如:

<siteMap>
    <siteMapNode url="Default.aspx" title="Home" >
        <siteMapNode url="hosting/Default.aspx" title="Hosting" />
        <siteMapNode url="software/Default.aspx" title="Software">
            <siteMapNode url="firefox/Default.aspx" title="Firefox">
                <siteMapNode url="Download.aspx" title="Download" />
                <siteMapNode url="Support.aspx" title="Support" />
            </siteMapNode>
        </siteMapNode>
    </siteMapNode>
</siteMap>

并创建了一个放置在 Masterpage 上的控件。这是菜单生成代码:

protected void Control_Load(Object sender, EventArgs e)
{
    string path = String.Empty;
    StringCollection list = new StringCollection();

    foreach (string str in Request.Url.Segments)
    {
        path += str;
        string link = String.Format("<a href=\"{0}://{1}{2}\">{3}</a>", Request.Url.Scheme, Request.Url.Authority, path, this.names[str]);
        list.Add(link);
    }

    foreach (string str in list)
    {
        menu += String.Concat(str, SeparatorLine);
    }
    menu = menu.Remove(menu.LastIndexOf(SeparatorLine));
}

但它使用像 { { "/", "Home" }, { "hosting/", "Hosting" }, { "software/", "Software" } .. } 这样的 StringDictionary

如何使用对站点地图的查询而不是它?或者可能是其他东西,不是站点地图,而是事先发明的。

4

3 回答 3

9

ASP.NET SiteMapPath 控件

<asp:SiteMapPath ID="SiteMapPath1" Runat="server" />
于 2009-02-16T21:26:37.750 回答
5

您可以使用SiteMapPath控件(应该在工具箱的导航类别中)。检查此页面以获取教程。

于 2009-02-16T21:26:26.643 回答
1

只需将 SiteMapProvider 属性设置为您要用于面包屑的站点地图的提供程序,您就可以设置好了。我通常只是将 SiteMapPath 放在一个 div 中,然后在 div 上设置 CSS 来设置面包屑的样式。

不过要注意一个问题。如果您抑制站点地图中的任何根节点,它们仍将显示在您的面包屑中。我通过尝试将相同的站点地图用于面包屑和将 SiteMapDataSource 用于我不想显示起始节点的树视图来遇到此问题。

祝你好运!

于 2009-05-18T12:03:29.317 回答