Как всегда разрешать URL-адреса относительно корня моего веб-приложения? - PullRequest
1 голос
/ 08 марта 2012

У меня есть веб-приложение, которое представляет собой файл JavaScript со следующей строкой кода:

var arrowimages = { down: ['downarrowclass', 'images/AppNavDownArrow.gif', 23], right: ['rightarrowclass', 'images/AppNavRightArrow.gif'] }

Когда я нахожусь в корне моего веб-приложения, ссылка на изображения работает должным образом. Когда я просматриваю подпапку в моем приложении, она добавляет ту же подпапку к URL-адресу изображения и не загружается.

Как изменить код, чтобы он указывал на путь создания изображения, когда я нахожусь в подпапке в моем приложении?

Ответы [ 3 ]

10 голосов
/ 08 марта 2012

Вы должны привести пути с /. Таким образом, пути будут всегда разрешаться из корня домена.

var arrowimages = { down: ['downarrowclass', '/images/AppNavDownArrow.gif', 23], right: ['rightarrowclass', '/images/AppNavRightArrow.gif'] }

В противном случае они будут разрешены относительно к текущему URL; прикрепив путь к концу текущей папки (если вы не используете тег <base/ > (и, если это так, удалите его)).

Если ваше приложение находится в подпапке (например, http://example.com/myapp),, то вам нужно добавить префиксы к путям myapp, например; /myapp/images/AppNavDownArrow.gif.

Для переносимого решения вы можете рассмотреть возможность использования параметра конфигурации для хранения корня вашего приложения (например, root = /myapp/). Затем вы можете вывести этот параметр в объекте config в JavaScript, как объяснил в моем другом ответе . Тогда ваши URL будут выглядеть так:

var arrowimages = { down: ['downarrowclass', config.base + '/images/AppNavDownArrow.gif', 23], right: [config.base + '/rightarrowclass', '/images/AppNavRightArrow.gif'] } 
3 голосов
/ 08 марта 2012

Используйте /images/AppNavDownArrow.gif вместо images/AppNavDownArrow.gif.

0 голосов
/ 09 сентября 2014

Несмотря на то, что вы можете использовать префикс «/» для обозначения пути к корню домена, корень домена не всегда равен корню приложения в ASP.NET.Это также делает ваши скрипты хрупкими, если структура вашей среды разработки не соответствует вашей производственной среде.

Вместо этого используйте:

var arrowImages = { down: ['downarrowclass', '<%= Page.ResolveClientUrl("~/images/AppNavDownArrow.gif") %>', 23], right: ['rightarrowclass', '<%= Page.ResolveClientUrl("~/images/AppNavRightArrow.gif")  %>'] }

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

Если вы не хотите размещать скрипт на своей странице и вместо этого хранить его в файле .js на главной странице/ layout / что угодно, создайте переменную, которая указывает на корень вашего приложения, а затем ссылайтесь на эту переменную в вашем файле скрипта:

<script type="text/javascript">
        var configuration = {
            applicationRoot: '<%= Page.ResolveClientUrl("~/") %>',
                currentPath: '<%= HttpContext.Current.Request.Path %>'
            }
</script>

В вашем файле скрипта:

var arrowImages = { down: ['downarrowclass', configuration.applicationRoot +'/images/AppNavDownArrow.gif', 23], right: ['rightarrowclass', configuration.applicationRoot +'/images/AppNavRightArrow.gif'] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...