Работа с относительными путями к файлам в ASP.Net и Masterpages
-
08-07-2019 - |
Вопрос
Это может быть до боли простой вопрос, за который надо мной будут издеваться, но у меня возникают трудности с использованием путей к файлам в masterpages.Я полагаю, это связано с тем, что если страница в подкаталоге использует masterpage, то путь к файлу указан неверно.
Чтобы исправить это, мне нужно получить путь к файлу из корня, но, похоже, я не могу заставить его работать.
Я пытался:
<script type="text/javascript" src="~/jQueryScripts/jquery.js"></script>
и
<script type="text/javascript" src="../jQueryScripts/jquery.js"></script>
Ни с тем, ни с другим не повезло!
Есть какие-нибудь идеи о том, как я могу сообщить ему, чтобы получить путь к файлу из корня?Спасибо :)
Решение
Я просто предполагаю, что под filepath вы на самом деле подразумеваете URL (или uri, я забыл, какой из них является частичным).
Без символа ~ первый пример должен сработать. <script type="text/javascript" src="/jQueryScripts/jquery.js"></script>
приведет к тому, что браузер запросит http://www.example.com/jQueryScripts/jquery.js (где www.example.com находится ваш домен).
Другие советы
Если вы используете сайт с поддержкой AJAX, смотрите мой ответ на Предпочтительный способ включить относительную ссылку на JavaScript во вложенную мастер-страницу VS 2008.
Я верю, что вам нужно иметь runat=server
в <head>
метка из MasterPage
чтобы эта перебазировка URL сработала.
<head runat="server">
Во-первых, тильда впереди - это asp.net вещь для использования в серверных элементах управления и не будет работать в базовом HTML.
Не вдаваясь в подробные объяснения, вы могли бы просто использовать косую черту (/) впереди и включить название веб-приложения, если это не корневой сайт.
Или вы могли бы поместить код на свою главную страницу для динамического включения скриптов и позволить ему обрабатывать пути.Нравится:
public void AddJavascript(string javascriptUrl)
{
HtmlGenericControl script = new HtmlGenericControl("script");
script.Attributes.Add("type", "text/javascript");
javascriptUrl += "?v" + Assembly.GetExecutingAssembly().GetName().Version;
script.Attributes.Add("src", ResolveUrl(javascriptUrl));
Page.Header.Controls.Add(script);
}
Приведенный выше код также добавляет версию сборки.Я использую это в основном для разработки, поэтому мои файлы javascript обновляются всякий раз, когда я создаю.
Вы могли бы использовать Страница.ResolveUrl способ обойти это
например:
<script type="text/javascript" src="<%=Page.ResolveUrl("~/jQueryScripts/jquery.js")%>"></script>