Sitemap / Breadcrumb在默认页面上未显示Url路由

时间:2010-11-12 18:17:24

标签: c# asp.net url-routing sitemap

我的网站表单网站(4.0)设置了UrlRouting。 当我去

时,我的面包屑出现了

我的主要问题是http://Localhost/

因为它在IIS中默认为http://Localhost/default.aspx

我正在尝试避免将另一个元素添加到sitemap xml中的路径,如

<siteMapNode url="~/Home" title="Home"  description="Home" aspx="default.aspx">

最好的使用方法是什么?

我试图将此添加到我的路由表&amp;使用xmlSiteMapProvider来查看我是否可以使用它(这不起作用)。

routes.MapPageRoute("IISDefault", "", "~/Default.aspx");

以下是一些信息。

Routes
routes.MapPageRoute("Default", "Home", "~/Default.aspx");
routes.MapPageRoute("ListAll", "List", "~/ListAll.aspx");

Sitemap
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="~/Home" title="Home"  description="Home">
        <siteMapNode url="~/List" title="List All"  description="List All"  />
    </siteMapNode>
</siteMap>

XmlSiteMapProvider

   /// <summary>
    /// This is where the original sitemap node is overloaded.  We get the proper translation from the database.
    /// </summary>
    /// <param name="sender">This is the sender of the event</param>
    /// <param name="e">This is the event arguments</param>
    /// <returns>Returns a modified SiteMapNode</returns>
    /// <remarks></remarks>
    public SiteMapNode SmartSiteMapProvider_SiteMapResolve(object sender, SiteMapResolveEventArgs e)
    {

        SiteMapNode returnValue = null;

        if ((SiteMap.CurrentNode == null))
        {
            // If we don't find a sitemap node, then we might be working with UrlRouting
            returnValue = ProcessRoute(e);
        }


        return returnValue;

    }

    private SiteMapNode ProcessRoute(SiteMapResolveEventArgs e)
    {

        SiteMapNode returnValue = null;

        System.Web.Routing.RequestContext rc = HttpContext.Current.Request.RequestContext;

        if ((rc != null))
        {
            System.Web.Routing.RouteBase route = rc.RouteData.Route;

            if ((route != null))
            {
              // Play with the node (Never getting here)
            }
        }

        return returnValue;

    }

编辑:我将看看是否可以操纵routeCollection以某种方式获得匹配。

1 个答案:

答案 0 :(得分:2)

而不是:

Routes
routes.MapPageRoute("Default", "Home", "~/Default.aspx");
routes.MapPageRoute("ListAll", "List", "~/ListAll.aspx");

Sitemap
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="~/Home" title="Home"  description="Home">
        <siteMapNode url="~/List" title="List All"  description="List All"  />
    </siteMapNode>
</siteMap>

试试这个:

Routes
routes.MapPageRoute("Default", "Home", "~/");
routes.MapPageRoute("ListAll", "List", "~/ListAll.aspx");

Sitemap
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="~/" title="Home"  description="Home">
        <siteMapNode url="~/List" title="List All"  description="List All"  />
    </siteMapNode>
</siteMap>

否则“〜/”和“〜/ Home”是一回事。

或者您可以保留上面的内容,并在default.aspx页面中执行类似的操作......

if(Page.RouteData.Values[0] == "default.aspx")
    Response.Redirect("~/Home")

这会有效地将任何默认请求重定向到您的默认请求。

你的问题是服务器看到〜/“和”〜/ Home“是2个不同的网址,你基本上希望它们是相同的,所以你必须做出决定并决定哪一个重定向到另一个

个人如果这是我的解决方案,我将不会有“〜/ Home”的路由,我的站点地图中的基本节点看起来像这样:

<siteMapNode url="~/" title="Home"  description="Home">

很明显,“http:// yourdomain /”是主页,“http:// yourdomain / Home”可以是任何东西(关于你的家,我的家,家庭甜蜜的家,我家里喜欢的东西) )“http:// adomain /”是全球所有人的主页。