Как указать виртуальный путь для изображения в ASP.Net MVC бритвенный помощник

В моем классе хэнд-класса бритвы (находится в папке App_Code, у меня есть эта строка кода:

<img src="../../Content/images/ajax_activity.gif" alt="loading"/>

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

<img src="@Href("~/Content/images/ajax_activity.gif")" alt="loading" />

Ответ 1

ОК, решил, хотя я не совсем уверен, почему он работает. После успешного использования всех следующих комбинаций:

<img src="../Content/images/ajax_activity.gif" alt="loading"/>
<img src="/Content/images/ajax_activity.gif" alt="loading"/>
<img src="~/Content/images/ajax_activity.gif" alt="loading"/>
<img src="Content/images/ajax_activity.gif" alt="loading"/>

следующее, наконец, работало как ожидалось

<img src="./Content/images/ajax_activity.gif" alt="loading"/>

Он правильно вернул путь к изображению с помощью набора виртуальных каталогов. Любой, кто может это объяснить?

Ответ 2

Попробуйте следующее:

<img src="@Url.Content("~/Content/images/ajax_activity.gif")" alt="loading" />

Ответ 3

Вы можете использовать метод @Url.Content для преобразования виртуального относительного пути в абсолютный путь приложения следующим образом:

<img [email protected]("~/images/picture.png") alt="picture description">

Он будет преобразован в этот HTML-код, отправленный клиенту:

<img src="/appname/images/picture.png" alt="picture description">

UPDATE: В другой руке вы можете преобразовать изображение в base64, и оно будет отображаться правильно:

<img src="data:image/png;base64,iVBORw0KG...SuQmCC" alt="picture description">

Ответ 4

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

Если ваш URL приложения si что-то вроде

http://localhost/MyWebApp/

ASP.NET рассмотрит, что root является "localhost", когда он должен быть "MyWebApp".

Чтобы решить эту проблему, вам нужно преобразовать виртуальный каталог в приложение: в диспетчере IIS найдите каталог, щелкните его правой кнопкой мыши, а затем "Преобразовать в приложение".