ASP.NET: изображения повреждены при комбинировании перезаписи URL, asp: ImageButton и html base tag - PullRequest
0 голосов
/ 23 апреля 2010

Я использую перезапись URL-адресов в ASP.NET 4 (используя ISAPI_Rewrite) и обнаруживаю, что некоторые из моих изображений не загружаются, поскольку .NET, похоже, не понимает, что я использую HTML-тег BASE (довольно стандартно и необходимо при перезаписи URL):

Например, в моей среде разработки у меня есть:

<base href='http://localhost/venuefinder/Website/'></base>

и на моих страницах у меня есть:

<asp:ImageButton runat="server" ImageUrl="~/images/button.gif" />

На домашней странице сайта (http://localhost/venuefinder/Website/) это работает нормально, однако на странице, которая использует перезапись URL, изображение не работает:

/venuefinder/Website/venues/ashton_gate_stadium/V18639/

.. как браузер пытается загрузить:

http://localhost/images/buttons/search-button.gif

вместо:

http://localhost/venuefinder/Website/venues/images/buttons/search-button.gif

Это происходит потому, что .NET отображает кнопку как:

src="../../../images/buttons/search-button.gif"

... что неверно.

Можно ли как-то исправить эту проблему, чтобы .NET отображал правильный атрибут src для изображения? (без всего ../../../ и т. д.)

1 Ответ

2 голосов
/ 23 апреля 2010

Вместо использования ~/ в изображениях создайте виртуальную папку в IIS с именем images, которая сопоставляется с вашим каталогом изображений (так: http://localhost/images => c:\myproject\somesubdir\content\images).Затем вы можете использовать

<asp:ImageButton runat="server" ImageUrl="/images/button.gif" />

Мы делаем это для всех элементов содержимого нашего веб-сайта (script / images / css).

Если вы используете <base> в HTML, браузер принимает заданноеURL в качестве базы для изображений, которые начинаются с /.Так что в вашем случае вы можете просто отказаться от тильды.


Однако одно из преимуществ подхода Virtual Directory заключается в том, что вам больше никогда не придется беспокоиться о структуре url, ни в .NET, ни в JS:

ScriptHelper.RegisterScript("/js/somefile.js")

или

$().append('<img src="/images/file.jpg"/>')
...