Маршрутизация изображений относительно просмотров в Asp.Net MVC? - PullRequest
3 голосов
/ 13 марта 2012

Мне нужно иметь возможность размещать изображения по пути относительно вида, но я не уверен, как это сделать, потому что я не очень хорошо разбираюсь в маршрутизации MVC:

Если у меня есть такой маршрут:

routes.MapRoute(
                "Parameter",
                "{controller}/{action}/{lang}/{prod}",
                new { controller = "Manuals", action = "Product", lang = "en-US", prod = "productname" }

А потом я пытаюсь использовать относительный путь для изображений:

<embed class="images src="@Url.Content("images/sampleimage.svg")"></embed>

Это дает мне путь (если я проверю его в веб-инспекторе), который выглядит следующим образом: SRC = "http://localhost/Manuals/Product/en-US/images/sampleimage.svg"

что не там, где изображение. Он расположен физически на "http://localhost/Views/Manuals/en-US/productname/images/sampleimage.svg"

Таким образом, в основном папка Views, а затем папка с именем действия (Product). Итак, как я могу использовать пути относительно вида в этой среде? Действие становится частью URL-адреса, но нет фактической папки с именем, подобным методу действия, а также изображения будут находиться в папке Views, которая не является частью URL-адреса. Кроме того, последняя часть URL-адреса в кажется, что маршрут (имя продукта) вообще не отображается в пути к изображению, он интерпретируется как идентификатор или что-то еще, потому что я использую только один метод действия для обслуживания представлений, основанных на параметрах lang и prod?

Нет ли способа разместить изображения, подобные этому, и использовать относительные пути, такие как "images / imagename.svg" или тому подобное? Или я просто неправильно понимаю маршрутизацию в MVC?

Мне нужно сделать это так, чтобы упростить массовое добавление контента и результат XSL-преобразований ...

РЕДАКТИРОВАТЬ: Извините, у меня были неправильные URL-адреса в отношении результатов, которые я получил. Должно быть исправлено сейчас, чтобы отразить то, что у меня есть.

Ответы [ 2 ]

2 голосов
/ 13 марта 2012

Используйте действие контроллера для получения изображений из БД или диска. Вот пример получения изображений из папки «ImageFolder» в корне сайта.

public virtual FilePathResult GetImage(string imageId){
    var path = Path.Combine(Server.MapPath("~"), "ImageFolder", imageId + ".svg");
    return new FilePathResult(path, "image/jpg");
}

Вы можете использовать что-то подобное для получения образцов изображений для ваших продуктов.

В ASP.NET MVC вы не полагаетесь на иерархию папок для навигации по сайту. Фреймворк имеет некоторые соглашения о папках, но они не используются для маршрутизации.

Для статических изображений их можно поместить в папку «Содержимое / изображения».

2 голосов
/ 13 марта 2012

Я не уверен, понимаете ли вы, как должен работать фреймворк.

Мое первое замечание касается конвенций. Соглашение заключается в том, что вы храните ваши представления в папке Views. Затем вы можете иметь DisplayTemplates, EditTemplates и Shared для ваших шаблонов отображения / редактирования или общих частичных представлений. Это соглашение, к которому привыкли разработчики MVC, поэтому, если вы начнете размещать что-то еще в этих папках, вы запутаете других разработчиков и, в конечном счете, самих себя.

Чего ты пытаешься достичь? Вы после URL в каком-то определенном формате? Один из вариантов, который у вас есть, - реализовать действие, которое вернет ваше изображение. Другой альтернативой является перезапись URL или маршрутизация в статические файлы: Использование маршрутизации ASP.NET для обслуживания статических файлов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...