Пути на главных страницах
-
09-06-2019 - |
Вопрос
Я начал немного работать с мастер-страницами для сайта ASP.net mvc и столкнулся с вопросом.Когда я создаю ссылку в таблице стилей на главной странице, кажется, что путь к листу обновляется правильно.Это есть в коде, который у меня есть
<link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
но, глядя на исходный код, как только страница загружается в браузер, я получаю
<link href="Content/Site.css" rel="stylesheet" type="text/css" />
и это прекрасно.Однако тот же перевод пути, похоже, не работает для файлов сценариев.
<script src="../../Content/menu.js" type="text/javascript"></script>
просто получается одно и то же.Кажется, это все еще работает на странице верхнего уровня, но я подозреваю, что это просто браузер / веб-сервер, исправляющий мою ошибку.Есть ли способ сделать так, чтобы путь src тоже был глобализован?
Решение
<script src="<%= ResolveClientUrl("~/Content/menu.js") %>" type="text/javascript"></script>
Другие советы
Создайте метод расширения.Вот такой метод:
public static string ResolveUrl(this HtmlHelper helper, string virtualUrl)
{
HttpContextBase ctx = helper.ViewContext.HttpContext;
string result = virtualUrl;
if (virtualUrl.StartsWith("~/"))
{
virtualUrl = virtualUrl.Remove(0, 2);
//get the site root
string siteRoot = ctx.Request.ApplicationPath;
if (!siteRoot.EndsWith("/"))
siteRoot += "/";
result = siteRoot + virtualUrl;
}
return result;
}
Затем вы можете написать свой скрипт следующим образом:
<script type="text/javascript" src="<%= Html.ResolveUrl("~/Content/menu.js")%>"></script>
Используйте это вместо этого:
<link href="~/Content/Site.css" rel="stylesheet" type="text/css" />
или вы можете использовать базовый тег в разделе HEAD страницы.Тогда все ваши ссылки относятся к местоположению, указанному в теге "base", и вам не нужно использовать ".. / .. /" и "~" прочее.За исключением ссылок в CSS-файлах (фоновый URL и т.д.), где ссылки расположены относительно расположения css-файла.