Решения, которые я видел до сих пор, не работали в моем проекте (особенно не для ссылок .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 ...
}
});