ASP.NET - путь к ссылкам.CSS и.JS
У меня есть мастер-страница в корне моего проекта. У меня есть контент-страницы в моем проекте и во вложенных папках, ссылающихся на эту мастер-страницу. Как правильно ссылаться на мои файлы.CSS и.JS, если я всегда хочу, чтобы они были относительно корня?
Вот как я это делаю сейчас:
link href = "/ common / css / global.css" script src = "/ common / javascript / global.js"
Но это нарушает связь. Я попытался без начального "/", но это не сработало на моих страницах в подпапках.
4 ответа
Я бы использовал что-то вроде
Server.ResolveClientUrl("~/common/css/global.css")
Это будет получать правильный URL-адрес для вас в любое время.
Пример:
Согласно комментарию это будет полное использование.
<link type="text/css" rel="stylesheet"
href='<%= Server.ResolveClientUrl("~/common/css/global.css") %>' />
Согласно комментариям, другое проверенное использование, нет "ошибка CS1061:" System.Web.HttpServerUtility "не содержит определение" ошибка:
<script type="text/javascript"
src="<%= Page.ResolveUrl("~/Scripts/YourScript.js") %>" ></script>
Также важно всегда ставить закрывающий тег.
Вы можете сделать <link>
тег для запуска на сервере, поэтому Asp.Net разрешит URL для вас следующим образом:
<link href="~/common/css/global.css" runat="server" />
(Обратите внимание на '~')
Я не знаю, может ли это быть применено к <script>
пометьте, хотя, вы должны попробовать...
РЕДАКТИРОВАТЬ: я недавно обнаружил в проекте, что вы можете (и должны) использовать ScriptManager
держать ваши скрипты (вы можете иметь только 1 на страницу). Вы можете поместить один в вашу MasterPage и ссылаться на все ваши скрипты. Внутри вашей контентной страницы вы затем добавляете ScriptManagerProxy
это будет ссылаться на сценарии на главной странице, и вы даже можете добавить другие сценарии только для этой страницы содержимого.
Я делаю это так просто: link href="<%=ResolveUrl("~/common/css/global.css")%>"
Решения, которые я видел до сих пор, не работали в моем проекте (особенно не для ссылок.css). Проблемы были следующие:
- внутри
<link>
это не решило<%=...%>
выражение - он не нашел Page.ResolveURL во всех случаях
- возникли проблемы с кавычками "и", если вы вставили
<%=...%>
Поэтому я хотел бы предложить следующее решение: В коде (класс C# вашей главной страницы) добавьте следующие 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));
}
}
Для ссылок на таблицу стилей вы можете сказать:
<%=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 ...
}
});