относительный путь во внешнем файле javascript

Я пытаюсь показать эту картинку, но безуспешно.

If I do

$.blockUI.defaults.message = '<img src="../images/blockUI_Loader.gif" />';

Я получаю от скрипача

alt text

If I do

$.blockUI.defaults.message = '<img src="../_assets/images/blockUI_Loader.gif" />';

Я получаю от скрипача

alt text

Если я использую

$.blockUI.defaults.message = '<img src="~/_assets/images/blockUI_Loader.gif" />';

Я получаю от скрипача

alt text

Моя структура папок следующая

alt text

файл js находится в папке js.


person Lorenzo    schedule 12.11.2010    source источник
comment
К сожалению, Трэвис не согласился с ошибкой ... Он удалил свой ответ, а затем пришел сюда, чтобы проголосовать против ... Ох, Трэвис Трэвис ...   -  person Lorenzo    schedule 12.11.2010


Ответы (3)


Альтернативным решением является применение классов к вашим элементам с помощью JavaScript и установка фонового изображения с помощью CSS.

Относительные url пути в CSS всегда относятся к файлу таблицы стилей, что может упростить их согласование.

Например

JavaScript

$.blockUI.defaults.message = '<div class="blockUI-Loader"></div>';

CSS

.blockUI-Loader {
    /* url path is relative to this CSS file in "_assets/css" */
    background-image: url(../images/blockUI_Loader.gif);
    background-repeat: no-repeat;
    width: nnpx; /* width of image */
    height: nnpx; /* height of image */
}
person Phil    schedule 12.11.2010
comment
Итак, вы говорите, что пути URL-адресов относятся к css, в то время как @Amir Raminfar говорит, что они относятся к HTML ... кто ошибается? :) - person Lorenzo; 12.11.2010
comment
Прочтите мой ответ еще раз. Относительные пути в JavaScript относятся к вызывающему URI (странице). Относительные пути в файлах CSS указываются относительно местоположения файла CSS. - person Phil; 12.11.2010
comment
@ Фил Браун: извините! Я пропустил текст CSS. - person Lorenzo; 12.11.2010
comment
@ Фил Браун; Я провел новое испытание, используя "../../_assets/images/blockUI_Loader.gif", относящийся к главной странице, от которой наследуются все страницы. В любом случае результат тот же :( - person Lorenzo; 12.11.2010
comment
Расположение вашей мастер-страницы не имеет ничего общего с вашим CSS. Во всяком случае, я добавил пример. - person Phil; 12.11.2010
comment
@ Филип Браун: Да! Это тоже наверняка сработает! Спасибо за размещение кода. Я, вероятно, попытаюсь изменить фактическое найденное решение (см. Конец страницы) на ваше, поскольку оно более согласовано с ИМО. Я должен сделать несколько проб, если это разрешено плагином jquery blockUI. Еще раз спасибо - person Lorenzo; 12.11.2010

Относительный путь указывается относительно файла HTML, а не файла js. Итак, глядя на другие ваши файлы выше, я предполагаю, что вам нужны изображения / ...

person Amir Raminfar    schedule 12.11.2010
comment
Я изменил его на images /, потому что он должен относиться к файлу html. - person Amir Raminfar; 12.11.2010
comment
HTML файл? Этот код находится внутри функции javascript, которая используется почти во всех моих представлениях mvc ... - person Lorenzo; 12.11.2010
comment
Да, я так и предполагал. Вы делаете свои изображения относительно файла JS. Но это не имеет никакого отношения к тому, где находится файл js. Это относительно того, где находится HTML-файл, потому что именно там он отображается. Если вы используете его во многих местах, вы можете установить глобальное значение, например base = / xyz; а затем используйте базу везде в вашем файле javascript - person Amir Raminfar; 12.11.2010
comment
Где вы включаете файл javascript? - person Amir Raminfar; 12.11.2010
comment
Ребята, он пользуется .NET. Это веб-приложение, а не веб-сайт. - person Travis Webb; 12.11.2010
comment
Это относительно того, что браузер видит как файл. Если вы используете маршрутизацию, каждый уровень /parameter/parameter выглядит в браузере как папка. Если у вас есть переменное количество частей пути в ваших URL-адресах, вы вообще не можете использовать URL-адреса, относящиеся к пути, потому что каждая страница будет находиться на другом уровне относительно цели. В этом случае вы должны использовать корневые URL-адреса, создавая при необходимости относительные домашние URL-адреса в ASP.NET. - person bobince; 12.11.2010
comment
@Travis: Верно. Это веб-приложение ASP.NET MVC. - person Lorenzo; 12.11.2010
comment
@bobince: подождите, подождите ... эта инструкция - это просто тег, который плагин jquery blockUI будет отображать во время выполнения на странице. Это не URL-адрес, который будет перенаправлен - person Lorenzo; 12.11.2010

Наконец-то я нашел душу!

$.blockUI.defaults.message = '<img src="_assets/images/blockUI_Loader.gif" />';
person Lorenzo    schedule 12.11.2010
comment
Зачем? Все мои страницы находятся в подкаталоге, и он работает хорошо, даже если страница находится в каталоге на два уровня глубиной ... - person Lorenzo; 12.11.2010
comment
Учитывая, что это приложение MVC, URL-адрес запроса может выглядеть как controller, controller/action, controller/action/id (с учетом схемы маршрутизации по умолчанию). Каждый из них изменяет базовый URI для запроса и, следовательно, любые запросы относительного пути. Например, первый будет искать ваше изображение в _assets/images, второй - в controller/_assets/images, а третий - в controller/action/_assets/images. - person Phil; 12.11.2010
comment
да. Итак, мои страницы расположены от корня проекта до папки \Views\ViewName. Например, это моя домашняя страница, которая находится в папке \Views\Home\Index.aspx. - person Lorenzo; 12.11.2010
comment
Однако ваши просмотры не являются запрашиваемой страницей. См. Мою правку выше - person Phil; 12.11.2010
comment
Я думаю, вы путаете Контроллер и Действие с Представлениями. Каждое представление в проекте MVC находится в папке с именем контроллера (например, Home) внутри корневой папки с именем Views. Когда действие пытается отобразить представление, View Engine будет искать представление внутри структуры папок, которую я только что описал. - person Lorenzo; 12.11.2010
comment
Пожалуйста, ознакомьтесь с этим вопросом SO для получения более подробной информации http://stackoverflow.com/questions/2735240/change-the-views-location - person Lorenzo; 12.11.2010
comment
@Lorenzo Вы путаете файлы на своем сервере (классы, представления и т. Д.) С HTTP. К вашему приложению отправляются запросы, и оно отвечает контентом. Относительные пути в этом содержимом разрешаются с использованием URI, используемого для выполнения начального запроса, или URI, установленного в теге <base> в возвращенном HTML. Это будет выглядеть примерно так: hostname.com/xyz/controller/action - person Phil; 12.11.2010
comment
Я не путаю Вас прямо в этом. Но то же правило не распространяется на просмотры. Представления отображаются внутри метода действия, который был маршрутизирован после HTTP-запроса через маршрут. Действие выбирает ActionResult для отправки обратно клиенту. Этот результат - View. Для этого он просто выбирает представление с диска, а не из другого HTTP-запроса, который был бы бесполезен. Посмотрите эту статью http://msdn.microsoft.com/en-us/library/dd410123.aspx - person Lorenzo; 12.11.2010
comment
Прости, Филип. Вы согласны с тем, что не вызываете представление в URL-адресе проекта MVC? Если вы согласны с этим, вы можете понять, что представление действительно проходит по маршруту и ​​является частью HTTP-ответа, а не HTTP-запроса. - person Lorenzo; 12.11.2010
comment
@Lorenzo Физическое расположение на диске ваших сценариев просмотра (включая главные страницы) не имеет ничего общего с тем, как клиент (браузер) разрешает относительные пути в возвращенном HTML. Только контент, отображаемый из вашего представления, является частью ответа. Никакая другая информация о скрипте просмотра, включая его имя и путь на диске, не отправляется обратно клиенту. Единственная информация о местонахождении, известная клиенту, - это та, которая использовалась для запроса. См. stackoverflow.com/questions/4029091/ - person Phil; 12.11.2010
comment
Я думаю, мы говорим одно и то же по-разному :) - person Lorenzo; 12.11.2010