ASP.NET - путь к использованию для ссылки .CSS и .JS
У меня есть главная страница в корне моего проекта. У меня есть страницы контента во всем моем проекте и в подпапках, ссылающихся на эту главную страницу. Каков правильный способ ссылки на мои .CSS и .JS файлы, если я всегда хочу, чтобы они были относительно корня?
Вот как я это делаю сейчас:
link href="/common/css/global.css"
script src="/common/javascript/global.js"
Но это нарушает связь. Я пробовал без ведущего "/", но это не работало на моих страницах во вложенных папках.
Ответы
Ответ 1
Я бы использовал что-то вроде
Server.ResolveClientUrl("~/common/css/global.css")
Это позволит получить правильный URL-адрес для вас в любое время.
Пример:
В комментарии это будет полным использованием.
<link type="text/css" rel="stylesheet"
href='<%= Server.ResolveClientUrl("~/common/css/global.css") %>' />
В соответствии с комментариями другое одобренное использование, "ошибка CS1061:" System.Web.HttpServerUtility "не содержит определения" error:
<script type="text/javascript"
src="<%= Page.ResolveUrl("~/Scripts/YourScript.js") %>" ></script>
Также важно всегда помещать закрывающий тег.
Ответ 2
Вы можете сделать тег <link>
для запуска на сервере, чтобы Asp.Net разрешил URL-адрес для вас следующим образом:
<link href="~/common/css/global.css" runat="server" />
(Обратите внимание на "~" )
Я не знаю, может ли он применяться к тегу <script>
, но вы должны попробовать...
EDIT: Недавно я обнаружил в проекте, что вы можете (и должны) использовать ScriptManager
для хранения ваших скриптов (у вас может быть только 1 на страницу). Вы можете поместить его в свой MasterPage и ссылаться на все ваши скрипты. Внутри страницы вашего контента затем добавьте ScriptManagerProxy
, который будет ссылаться на сценарии на главной странице, и вы даже можете добавить другие сценарии только для этой страницы контента.
Ответ 3
Я делаю это так просто: link href="<%=ResolveUrl("~/common/css/global.css")%>"
Ответ 4
Решения, которые я видел до сих пор, не работали в моем проекте (особенно не для ссылок .css). Были следующие вопросы:
- внутри
<link>
он не разрешил выражение <%=...%>
- он не обнаружил Page.ResolveURL во всех случаях
- возникла проблема с кавычками "и", если вы вложили
<%=...%>
Итак, я хотел бы предложить это решение: в коде позади (ваша основная страница класса С#) добавьте следующие 3 метода:
public partial class SiteBasic : System.Web.UI.MasterPage
{
public string ResolveURL(string url)
{
var resolvedURL=this.Page.ResolveClientUrl(url);
return resolvedURL;
}
public string cssLink(string cssURL)
{
return string.Format("<link href='{0}' rel='stylesheet' type='text/css'/>",
ResolveURL(cssURL));
}
public string jsLink(string jsURL)
{
return string.Format("<script src='{0}' type='text/javascript'></script>",
ResolveURL(jsURL));
}
}
Для ссылок stylsheet вы можете сказать:
<%=cssLink("~/css/custom-theme/jquery-ui-1.8.20.custom.css")%>
Для ссылок JavaScript это выглядит так:
<%=jsLink("~/Scripts/jquery-1.7.2.js")%>
И для других ссылок вы можете использовать:
<a href='<%=ResolveURL("~/Default.htm")%>'>link</a>
<img title='image' src='<%=ResolveURL("~/Images/logo.png")%>'/>
Примечание.. Я нашел, что лучше использовать одиночные кавычки вне и двойные кавычки внутри атрибута href или src, как показано в приведенном выше примере. Выполнение этого наоборот вызвало проблемы в некоторых случаях, когда я нашел.
Это решение прост и хорошо работает в моем случае, даже если страницы, ссылающиеся на главную страницу, находятся в разных подкаталогах. В основном это означает перевод пути ~
(который должен быть абсолютным из корня вашего веб-сайта) в относительный путь (с использованием как можно большего количества ../
в пути) на основе текущей страницы отображение.
Расширенный совет:
Если вы используете вызовы AJAX для вызова методов веб-сервисов, тогда у вас будет такая же проблема, если обратиться к ним, если у вас есть страницы ASPX на разных уровнях каталогов. Я рекомендую вам определить что-то вроде (предполагая, что ваши веб-службы находятся в каталоге ~/AJAX
):
<script type="text/javascript">
function getWebServicePath() { return '<%=ResolveURL("~/AJAX/")%>'; }
</script>
внутри раздела <head> ... </head>
главной страницы . Это сделает входной путь веб-службы доступным в вашем JavaScript. Вы можете использовать его как
$.ajax({
type: "POST",
url: getWebServicePath()+"myWebService.asmx/myMethod",
data: $.toJSON({ param: "" }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
// ... code on success ...
},
error: function (ex) {
// ... code on error ...
}
});