Подтвердить что ты не робот

Использование корневых относительных ссылок сайта в 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

Таким образом, это будет "полный" корень, а не относительный корень...

Как я могу это исправить?

4b9b3361

Ответ 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" и т.д.