2010-08-02 2 views
16

У меня есть страница ASP.NET MVC, где я пытаюсь показать дружественные URL-адреса.ASP MVC Дружественные URL-адреса и обратные пути

Итак, у меня есть вид категории в домашнем контроллере, который принимает значение категорииKey для получения содержимого страницы.

Например: http://localhost/Home/Category/Bikes получает информацию о велосипеде.

в моем Global.asax.cs, я следующий справиться с этим:

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 
); 
} 

Это работает просто отлично, и он получает содержание, однако, я получаю содержание от системы управления контентом , для удобного редактирования. При добавлении изображения на управление контентом, он добавляет изображение с относительным путем:

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

Теперь, если я Гото «http://localhost/Home/Category», и тег изображения находится на базовой странице, то он будет подтянуть образ. Однако, если я перейду «http://localhost/Home/Category/» или добавьте фактическую категорию «/ Главная/Категория/Велосипеды» /, изображение не отображается. Свойства изображения указывают на «http://localhost/Home/AdminUploadContent/bikes.gif».

Есть ли что-нибудь, что я могу добавить в свой файл Global.aspx.cs для обработки относительного пути? Даже если я вручную отредактирую управление контентом, чтобы добавить ../../AdminUploadContent/bikes.gif, он рубит первый ./, так как он выполняет некоторую проверку.

ответ

2

Вы можете использовать относительный путь "~ /", чтобы обратиться к текущему виртуальному каталогу, на котором находится страница. Попробуйте добавить RUNAT = атрибут «сервер» на свою «IMG» метку и знак «~» в «Src» атрибут:

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

Я бы не рекомендовал смешивать идиому asp.net Webforms с asp.net mvc. Придерживайтесь этого

Bikes
Roman

35

Используйте метод Url.Content при создании пути к изображению.

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

или с помощью WebForms просмотра двигателя:

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

runat = «сервер» в этом случае не нужен, я думаю, –

+0

вы правы. починил это. – marcind

+0

@marcind, привет, я сохраняю Imagepath в базе данных как: 'c: // user/tom/images', я не могу получить его в поле зрения, почему? – stom

0

Вы можете реализовать модуль НТТР, который будет переписывать путь от относительной ../../img.png к необходимости обработки Referer http header, например.

0

Это тоже работает.

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