2010-11-12 1 views
3

J'ai installé le site web forms (4.0) avec UrlRouting. Ma mie de pain apparaît quand je vais àPlan du site/Fil d'Ariane n'apparaissant pas avec le routage Url sur la page par défaut

Mon principal problème est avec http://Localhost/

Comme il est en défaut de http://Localhost/default.aspx dans IIS

Je suis essayer d'éviter la route d'ajouter un autre élément au sitemap xml like

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

Quelle serait la meilleure approche à utiliser?

J'ai essayé d'ajouter ceci à ma table de routage & en utilisant un xmlSiteMapProvider pour voir si je pouvais ainsi quelque chose avec elle (qui ne fonctionnait pas).

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

Voici quelques informations.

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; 

    } 

Edit: Je vais voir si je peux manipuler le RouteCollection pour obtenir un match en quelque sorte.

Répondre

1

Au lieu de:

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> 

essayez ceci:

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> 

Sinon "~ /" et "~/Home" sont la même chose.

ou vous pouvez laisser ci-dessus et comme il est dans la page default.aspx faire quelque chose comme ça ...

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

Ce redirigerez efficacement toute demande par défaut à votre demande par défaut. Votre problème est que le serveur voit ~/"et" ~/Home "comme étant deux URL différentes et que vous voulez qu'elles soient identiques, vous devez donc prendre une décision et décider laquelle rediriger vers le . autres

personnellement si cela était ma solution que je ne aurais pas avoir une route pour « ~/Home » et mon noeud de base dans mon plan Sitemap ressemblerait à quelque chose comme ceci:

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

Il est propre et évident que "http: // yourdomain /" est la page d'accueil et "http: // yourdomain/Home" pourrait être quelque chose (à propos de votre maison, ma maison, maison sweet home, choses que j'aime chez moi) alors que "http: // adomain/"est la page d'accueil à travers le monde pour tout le monde.

+0

Merci pour la réponse Wardy. Je vais devoir revenir dans le swing des choses pour ce code. Cela fait longtemps. J'ai essayé de mettre votre url = "~ /" title = "home" dans mon sitemap mais en vain.Le fil d'Ariane ne vient pas quand je vais au Http: // yourdomain. – Lareau

+0

Qu'attendez-vous de voir dans le fil d'ariane ??? ... pour une page d'accueil techniquement il n'y a pas un fil d'Ariane parce que la miette de pain montre le chemin vers la racine de votre position actuelle ainsi la page d'accueil est une sorte d'exception ... J'ai tendance à coder un lien vers ~/si Je pense que c'est pertinent ... la chose est ... si vous êtes sur la page d'accueil, pourquoi afficheriez-vous un lien vers la page d'accueil? – War

+0

Bon point, j'ai toujours supposé que si vous étiez sur la page d'accueil, on dirait simplement Home mais sans lien. De ma recherche rapide google, les gens l'enlèvent simplement de la page d'accueil. Merci pour l'astuce – Lareau

Questions connexes