Rozwiązania widziałem do tej pory nie działał w moim projekcie (zwłaszcza nie dla .css linków). Problemy były następujące:
- wewnątrz
<link>
to nie rozwiązało wyraz
- nie znaleźć stronę
<%=...%>
.ResolveURL we wszystkich przypadkach
- było pewne problemy z "i" cytuje jeśli embedd
<%=...%>
Więc chciałbym zaoferować tego rozwiązania: w kodzie tyłu (C# klasy Twojej strony wzorcowej za), dodać The 3 następujących metod:
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));
}
}
Dla stylsheet odniesienia, można wtedy powiedzieć:
<%=cssLink("~/css/custom-theme/jquery-ui-1.8.20.custom.css")%>
Dla JavaScript odniesień, to wygląda tak:
<%=jsLink("~/Scripts/jquery-1.7.2.js")%>
I innych odniesienia, można użyć:
<a href='<%=ResolveURL("~/Default.htm")%>'>link</a>
<img title='image' src='<%=ResolveURL("~/Images/logo.png")%>'/>
Uwaga: znalazłem lepiej jest używać apostrofów zewnętrzne i podwójne cudzysłowy wewnątrz atrybutu href lub src, jak pokazano w powyższym przykładzie. Wykonanie go na odwrót spowodowało w niektórych przypadkach kłopoty, które znalazłem.
To rozwiązanie jest proste i działa dobrze w moim przypadku, nawet jeśli strony odwołujące się do strony wzorcowej znajdują się w różnych podkatalogach. To, co w zasadzie robi to tłumaczenie ścieżki (która musi być absolutna od katalogu głównego twojej witryny) do ścieżki względnej (użycie jak największej liczby ścieżek ../
) w zależności od strony, którą aktualnie wyświetlasz.
zaawansowane podpowiedź:
Jeśli używasz AJAX wywołuje w celu wywołania metod usług internetowych, to będziesz miał ten sam problem ich odsyłania jeśli masz strony aspx na różnych poziomach katalogów . Polecam zdefiniować coś jak (przy założeniu, że usługi internetowe znajdują się w katalogu ~/AJAX
):
<script type="text/javascript">
function getWebServicePath() { return '<%=ResolveURL("~/AJAX/")%>'; }
</script>
wewnątrz sekcji <head> ... </head>
swojej głównej stronie. Spowoduje to, że ścieżka dostępu do usługi internetowej będzie dostępna w twoim kodzie JavaScript. Można go użyć tak, jak
$.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 ...
}
});
Więc po prostu zrobiłbym to w bloku kodu w linii w moim pliku .aspx? –
Mike - Poprawiono wpis na przykładzie –
Dodatkowo używałbym ResolveUrl vs ResolveClientUrl, URL klienta wyjaśni ścieżkę w stosunku do miejsca, w którym TWÓJ jest teraz, tj. - użyje ../../ jeśli jesteś powyżej, wersja ResolveUrl zawsze będzie działać absolutnie. To może nie wydawać się ważne, ale jest błąd dotyczący * cont * – meandmycode