Использование корневых относительных ссылок сайта в Razor
У меня есть сайт, который отлично работает с Razor (С#), все кодирование работает правильно, когда я использую локальное тестирование (WebMatrix IIS).
Когда я ставлю его "онлайн" на моем сервере, веб-сайт не находится в корне сайта.
Например:
http://intranet.mycompany.com/inform
Это в основном "корень" моей структуры папок, поэтому все мои папки начинаются оттуда (css файл default.cshtml... и т.д.)
Мой "_PageStart.cshtml" видит, что он правильно вызывает, когда я обращаюсь к своему сайту со ссылкой http://intranet.mycompany.com/inform, он дает мне макет, который у меня есть настроен в _PageStart.cshtml(и он действительно показывает макет + rendered default.cshtml)
НО ничего другого не получает правильный путь, например:
<img src="~/images/logos/hdr.png" />
Держатель img там, я вижу его, но показывает, что ссылка сломана... когда я правой кнопкой мыши нажмите на держатель img и сделаю свойства, чтобы увидеть, где должны быть файлы:
http://intranet.mycompany.com/images/logos/hdr.png
Таким образом, это будет "полный" корень, а не относительный корень...
Как я могу это исправить?
Ответы
Ответ 1
Вы должны использовать относительные пути по всему вашему приложению:
~
не будет работать в статическом html-коде.
Вы можете написать
<img src="@Url.Content("~/images/logos/hdr.png")" />
или
<img src="../images/logos/hdr.png" />
Первый подход хорош для файлов макетов, где ваш относительный путь может меняться, когда у вас разные URL-адреса маршрутизации маршрута.
ИЗМЕНИТЬ
Что касается вашего вопроса о нормальных ссылках:
При ссылке на другую страницу в приложении вы не указываете файл представления как цель, а действие, которое отображает представление в качестве результата. Для этого вы используете HtmlHelper ActionLink
:
@Html.ActionLink("Linktext", "YourController", "YourAction")
Это автоматически генерирует правильный URL-адрес:
<a href="YourController/YourAction">Linktext</a>
РЕДАКТИРОВАТЬ 2
Хорошо, нет MVC - так что вам нужно сами создавать свои ссылки.
Вы также должны использовать относительные пути. Не начинайте ссылку с символом /
!
<a href="linkOnSameLevel.cshtml">Link</a>
<a href="../linkOnParentLevel.cshtml">Link</a>
<a href="subFolder/linkOnOneLevelDown.cshtml">Link</a>
РЕДАКТИРОВАТЬ 3
При использовании страниц макета вы можете использовать метод расширения Href
для генерации относительного URL:
<link href="@Href("~/style.css")" ...
Ответ 2
Используйте Url.Content
, как показано ниже:
<img src="@Url.Content("~/images/logos/hdr.png")" />
Ответ 3
Я знаю, что "~
" добавляется по умолчанию, но я стараюсь изменить его так, чтобы все пути были относительно моего кода, а не корня приложения, используя "..
", например. "../images/logos"
и т.д.