2010-04-23 11 views
0

j'utilise une route comme celui-ciStockage des liens vers les pages de contenu internes dans ASP.NET MVC

 routes.MapRoute(
      "PageBySlug", 
      RouteType.Regular, 
      "{slug}", 
      new {controller = "Page", action = "Display", slug = "Default"}, null 
      ); 

à la carte demande à ~/Some-page-Slug à ~/Page/Affichage/Some-page -Limace. Lors de l'ajout de contenu, l'utilisateur peut choisir de lier des pages existantes pour créer des références, puis stocker ces liens dans ce format dans le magasin de données: "/ Some-Page-Slug".

Lorsque j'exécute l'application dans Cassini et que je retire le lien de la banque de données et que je l'attache à une balise, cela ressemble à http://localhost:93229/Some-Page-Slug et ce lien fonctionne.

Mais lors de l'exécution de l'application dans un répertoire virtuel sous un site Web dans IIS, le lien ci-joint génère cette URL http://localhost/Some-Page-Slug, alors qu'elle devrait être http://localhost/virtualdir/Some-Page-Slug.

Bien sûr, cela génère une erreur 404. Comment puis-je résoudre ce problème pour qu'il soit universellement utile et fonctionne dans toutes les circonstances? Devrais-je le stocker différemment dans la base de données ou devrais-je le transformer correctement dans mes vues lors de l'exécution et comment le faire?

Répondre

1

que j'ai trouvé une solution déjà:

RouteValueDictionary routeValues = new RouteValueDictionary 
              { 
               {"slug", Html.Encode(Model.Url)} 
              }; 
// the commented lines work in IIS but not is ASP.NET builtin server   
//string url = UrlHelper.GenerateUrl("PageBySlug", "Display", "Page", routeValues, RouteTable.Routes, 
//Request.RequestContext, true); 
string url = Url.Content("~/" + Html.Encode(Model.Url)); // this works in both 

Si vous avez d'autres suggestions, ils sont les bienvenus!

Questions connexes