Asp MVC 3: динамически разрешать относительные ресурсы в представлениях - PullRequest
2 голосов
/ 24 марта 2011

У меня есть приложение javascript , которое запускает в представлении (index.cshtml) .

Проблема:
Проблема в том, что все относительные пути равны относительно текущего URL , что было бы нормально в простом html-приложении, но не в asp mvc. Приложение js не должно беспокоиться о том, подается ли оно в обычном html-файле или через страницу asp mvc.

т.е. //" rel="nofollow">http://www.domain.com/// содержит скрипт test.js . Этот скрипт загружает внешний XML-файл поиска относительно него, т.е. " Данные / data.xml ". Результирующий URL-адрес читается как //data/data.xml" rel="nofollow">http://www.domain.com///data/data.xml. Это не найдено.

Вопрос:
Есть ли способ направить статические файлы (изображения, ..., возможно, даже файлы js) в папку содержимого, например " ~ / Content / controller / action / / "?

Любая помощь приветствуется!

Lg warappa

PS: я знаю о Url.Content (), но здесь это не подходит.

Ответы [ 2 ]

2 голосов
/ 25 марта 2011

Решение не требует сопоставления - просто простой HTML-тег в заголовке:

<base href="@(Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped) + 
    Url.Content("~/content/controller/action/"))" />

Lg warappa

EDIT
Некоторым браузерам нужен абсолютный URL - образец обновлен.

1 голос
/ 24 марта 2011

Вы можете использовать абсолютные URL-адреса для доступа к статическим ресурсам:

$('img').attr('src', '/Content/Pictures/picture1.png');

или

<script src="/Scripts/script.js"></script>

Таким образом, вы всегда будете получать одни и те же ресурсы относительно базового адреса страницы, независимо от того, загружаете ли вы скрипт в /{Controller}/{Action}/{View}, {Area}/{Controller}/{Action}/{View}, в пользовательский маршрут или даже в HTML-страницу статического скрипта.

Или, возможно, вам нужно использовать CSS-файлы, поскольку url('<path>') CSS разрешает адреса относительно местоположения CSS-файла. Вам просто нужно импортировать один файл CSS, который имеет все пути к файлам ресурсов (изображения?). Тогда сценарии могут ссылаться на отдельные имена классов, таким образом, вообще не будучи осведомленными о местоположении. Это то, что делают библиотеки, такие как jQuery UI. Но опять же, для этого потребуется фиксированная структура папок относительно документа CSS.

...