面包屑SiteMapPath和SEO友好路由

时间:2011-02-24 01:58:34

标签: asp.net routing breadcrumbs sitemappath

我的路由设置如下:

void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("", "Home", "~/Default.aspx");
    ......
}

我正在使用SiteMapPath控件实现面包屑:

<asp:SiteMapPath ID="SiteMapPath1" CssClass="breadCrumbs" runat="server">
</asp:SiteMapPath>

Web.sitemap的设置如下:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="Home" title="Home"  description="Home">    
        <siteMapNode url="~/About" title="About"  description="About">
            <siteMapNode url="~/History" title="History"  
                description="History" />    
        </siteMapNode>
    </siteMapNode>
</siteMap>

我的问题是,当我导航到mysite.com而不是mysite.com/default.aspx时,Home breadcrumb节点不会出现。我错过了什么?

更新

我设法通过更新Web.sitemap来显示“Home”节点,如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="Home" title="Home"  description="Home">
        <siteMapNode url="~/Default.aspx" title=""  description="" />
        <siteMapNode url="~/About" title="About"  description="About">
            <siteMapNode url="~/History" title="History"  
                description="History" />
        </siteMapNode>
    </siteMapNode>
</siteMap>

唯一剩下的问题是路径分隔符仍然显示在mysite.com的主页上

有没有办法以编程方式呈现主页不可见的分隔符? SiteMapPath控件本身位于母版页中。

enter image description here

1 个答案:

答案 0 :(得分:1)

也许您应该按如下方式更改站点地图文件:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="~/" title="Global Site Name or Welcome Message"  description="Home">
        <siteMapNode url="~/Home" title="Home"  description="" />
        <siteMapNode url="~/About" title="About"  description="About">
            <siteMapNode url="~/History" title="History"  
                description="History" />
        </siteMapNode>
    </siteMapNode>
</siteMap>

从sitemapdatasource你应该设置ShowStartingNode="false",我认为这可以解决你的两个问题......

注意:当然这需要您在global.asax文件(VB)中进行此更改:

RouteTable.Routes.MapPageRoute("Home0", "", "~/Default.aspx", True)
RouteTable.Routes.MapPageRoute("Home1", "Home", "~/Default.aspx", True)

希望这会有所帮助...