Использование корневых ссылок сайта в Razor - PullRequest
52 голосов
/ 20 декабря 2011

У меня есть веб-сайт, который работает нормально с Razor (C #), все кодирование работает правильно, когда я использую локальное тестирование (WebMatrix IIS).

Когда я помещаю его "онлайн" на моем сервере, веб-сайт не находится в корне сайта, он сам

Например:

http: // intranet.mycompany.com/inform

Это, по сути, «корень» моей структуры папок, поэтому все мои папки начинаются оттуда (css файл default.cshtml ... и т. Д.)

Мой "_PageStart.cshtml" видит его правильно, потому что, когда я захожу на свой сайт по ссылке http://intranet.mycompany.com/inform, он дает мне макет, который я настроил в _PageStart.cshtml (и он действительно показывает макет + отрендеренный по умолчанию .cshtml)

НО больше ничего не получает правильный путь, например:

<img src="~/images/logos/hdr.png" />

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

http: // intranet.mycompany.com/images/logos/hdr.png

Итак, он идет к «полному» корню, а не к относительному корню ...

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

Ответы [ 3 ]

97 голосов
/ 20 декабря 2011

Вы должны использовать относительные пути во всем приложении:

~ не будет работать в статическом HTML-коде.

Вы можете написать

<img src="@Url.Content("~/images/logos/hdr.png")" />

или

<img src="../images/logos/hdr.png" />

Первый подход подходит для файлов макетов, где ваш относительный путь может меняться, если у вас URL-адреса маршрутизации разной длины.

EDIT

По вашему вопросу о нормальных ссылках:

При ссылке на другую страницу в вашем приложении вы не указываете файл представления в качестве цели, а действие, которое отображает представление в качестве результата. Для этого вы используете 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")" ...
5 голосов
/ 20 декабря 2011

Используйте Url.Content, как показано ниже:

<img src="@Url.Content("~/images/logos/hdr.png")" />
0 голосов
/ 20 декабря 2011

Я знаю, что '~' добавлено по умолчанию, но я склонен изменить его так, чтобы все пути относились к моему файлу кода, а не к корню приложения, используя "..", например."../images/logos" и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...