2010-08-02 3 views
16

J'ai une page ASP.NET MVC, où j'essaie d'afficher des URL conviviales. Donc, j'ai une vue de catégorie dans le Home Controller, qui accepte une valeur categoryKey pour obtenir le contenu de la page.ASP MVC Friendly URL et Relative Path Images

Par exemple: http://localhost/Home/Category/Bikes obtient le contenu du vélo.

dans mes Global.asax.cs, je donne les résultats suivants pour gérer ceci:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Category", 
     "{controller}/{action}/{categoryKey}", 
     new { controller = "Home", action = "Category", categoryKey = "" }); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 
} 

Cela fonctionne très bien, et il obtient le contenu, cependant, je reçois le contenu d'un système de gestion de contenu , pour faciliter l'édition. Lorsque vous ajoutez une image sur la gestion de contenu, il ajoute l'image avec un chemin relatif:

<img src="../AdminUploadContent/bikes.gif" alt="Bikes" /> 

Maintenant, si je goto « http://localhost/Home/Category », et cette étiquette d'image est sur la page de base, il va tirer la image. Cependant, si je deviens "http://localhost/Home/Category/", ou si j'ajoute la catégorie "/ Accueil/Catégorie/Bicyclettes" /, l'image n'apparaît pas. Les propriétés de l'image pointent sur "http://localhost/Home/AdminUploadContent/bikes.gif".

Y at-il quelque chose que je peux mettre dans mon fichier Global.aspx.cs pour gérer le chemin relatif? Même si je modifie manuellement la gestion de contenu pour ajouter ../../AdminUploadContent/bikes.gif, il coupe le premier ../, puisqu'il effectue une certaine validation.

Répondre

2

Vous pouvez utiliser le chemin relatif "~ /" pour désigner le répertoire virtuel en cours où se trouve la page. Essayez d'ajouter runat = attribut « serveur » à votre tag « img » et « ~ » signe dans « src » attribut:

<img runat="server" src="~/AdminUploadContent/bikes.gif" alt="Bikes" /> 
+4

Je ne recommande pas de mélanger l'idiome asp.net Webforms avec asp.net mvc. Stick à ce

Bikes
Roman

35

Utilisez la méthode Url.Content lors de la génération d'un chemin à votre image.

<img src="@Url.Content("~/AdminUploadContent/bikes.gif")" /> 

ou si vous utilisez le moteur WebForms Vue:

<img src="<%= Url.Content("~/AdminUploadContent/bikes.gif") %>" /> 
+0

runat = "serveur" n'est pas nécessaire dans ce cas, je pense que –

+0

vous avez raison. l'a réparé. – marcind

+0

@marcind, salut, je sauvegarde Imagepath dans la base de données comme: 'c: // utilisateur/tom/images', je ne suis pas en mesure de le récupérer en vue, pourquoi? – stom

0

Vous pouvez implémenter un module personnalisé http qui réécrire chemin du ../../img.png par rapport à la manipulation nécessaire du Referer En-tête http, par exemple.

0

Cela fonctionne aussi.

<img src="@Url.Content("~/Images/yourimage.png")"/>