Więc uruchamiam ten javascript i wszystko działa dobrze, z wyjątkiem ścieżek do obrazu tła. Działa w moim lokalnym środowisku deweloperskim ASP.NET, ale NIE działa po wdrożeniu na serwerze w katalogu wirtualnym.
To jest w zewnętrznym pliku .js, struktura folderów to
Site/Content/style.css
Site/Scripts/myjsfile.js
Site/Images/filters_expand.jpg
Site/Images/filters_colapse.jpg
to jest to, skąd jest dołączany plik js
Site/Views/ProductList/Index.aspx
$("#toggle").click(function() {
if (left.width() > 0) {
AnimateNav(left, right, 0);
$(this).css("background", "url('../Images/filters_expand.jpg')");
}
else {
AnimateNav(left, right, 170);
$(this).css("background", "url('../Images/filters_collapse.jpg')");
}
});
Próbowałem używać '/Images/filters_collapse.jpg'
i to też nie działa; wydaje się jednak, że działa na serwerze, jeśli używam '../../Images/filters_collapse.jpg'
.
Zasadniczo chcę mieć taką samą funkcjonalność jak tylda ASP.NET - ~
.
aktualizacja
Czy ścieżki w zewnętrznych plikach .js są względne w stosunku do strony, na której się znajdują, czy rzeczywistej lokalizacji pliku .js?
javascript
html
asp.net-mvc
css
path
Nate
źródło
źródło
Odpowiedzi:
Ścieżki plików JavaScript
W skrypcie ścieżki są względne w stosunku do wyświetlanej strony
dla ułatwienia możesz wydrukować prostą deklarację js, taką jak ta i używając tej zmiennej we wszystkich skryptach:
Rozwiązanie, które zostało zastosowane w StackOverflow około lutego 2010:
<script type="text/javascript"> var imagePath = 'http://sstatic.net/so/img/'; </script>
Jeśli odwiedzałeś tę stronę około 2010 roku, mógłbyś po prostu rzucić okiem na źródło html StackOverflow , możesz znaleźć ten badass jednowierszowy [sformatowany do 3 linii :)] w
<head />
sekcjiźródło
imagePath.
Thanks!Url.Content("~")
, aby uzyskać Application korzeń. HTHvar imagePath = window.location.protocol + "//" + window.location.host + "/"
pobierz lokalizację swojego pliku javascript w czasie wykonywania za pomocą jQuery, analizując DOM pod kątem atrybutu „src”, który go skierował:
var jsFileLocation = $('script[src*=example]').attr('src'); // the js file path jsFileLocation = jsFileLocation.replace('example.js', ''); // the js folder path
(zakładając, że plik javascript nosi nazwę „example.js”)
źródło
.replace
wyrazjsFileLocation.replace(/example\.js.*$/, '')
w przypadku istnieje ciąg kwerendy jak numer wersji po.js
Właściwym rozwiązaniem jest użycie klasy css zamiast zapisywania src w pliku js. Na przykład zamiast używać:
$(this).css("background", "url('../Images/filters_collapse.jpg')");
posługiwać się:
$(this).addClass("xxx");
aw pliku css, który jest ładowany na stronę napisz:
.xxx { background-image:url('../Images/filters_collapse.jpg'); }
źródło
<img src="/codes/imgs/a.png">
. Nie mogę ustawić tego atrybutu src przez css.Dobre pytanie.
W pliku CSS adresy URL będą względne w stosunku do pliku CSS.
Podczas pisania właściwości za pomocą JavaScript adresy URL powinny zawsze odnosić się do strony (głównego żądanego zasobu).
Nie ma żadnej
tilde
funkcji wbudowanej w JS, o której wiem. Zwykłym sposobem byłoby zdefiniowanie zmiennej JavaScript określającej ścieżkę podstawową:<script type="text/javascript"> directory_root = "http://www.example.com/resources"; </script>
i odnosić się do tego katalogu głównego za każdym razem, gdy dynamicznie przypisujesz adresy URL.
źródło
W przypadku aplikacji MVC4, nad którą pracuję, umieściłem element skryptu w _Layout.cshtml i utworzyłem zmienną globalną dla wymaganej ścieżki, na przykład:
<body> <script> var templatesPath = "@Url.Content("~/Templates/")"; </script> <div class="page"> <div id="header"> <span id="title"> </span> </div> <div id="main"> @RenderBody() </div> <div id="footer"> <span></span> </div> </div>
źródło
Użyłem wzoru pekka. Myślę, że to kolejny wzór.
<script src="<% = Url.Content("~/Site/Scripts/myjsfile.js") %>?root=<% = Page.ResolveUrl("~/Site/images") %>">
i przeanalizował querystring w myjsfile.js.
Wtyczki | Wtyczki jQuery
źródło
Użyj następującej składni, aby cieszyć się luksusem asp.net tilda („~”) w javascript
<script src=<%=Page.ResolveUrl("~/MasterPages/assets/js/jquery.js")%>></script>
źródło
Odkryłem, że to działa dla mnie.
<script> document.write(unescape('%3Cscript src="' + window.location.protocol + "//" + window.location.host + "/" + 'js/general.js?ver=2"%3E%3C/script%3E'))</script>
oczywiście między tagami skryptu ... (nie jestem pewien, dlaczego tagi skryptów nie pojawiły się w tym poście) ...
źródło
Musisz dodać
runat="server"
i i przypisać do niego identyfikator, a następnie określić ścieżkę bezwzględną w następujący sposób:<script type="text/javascript" runat="server" id="myID" src="~/js/jquery.jqGrid.js"></script>]
Z poziomu za kodem możesz programowo zmienić źródło za pomocą identyfikatora.
źródło
Działa to dobrze w formularzach internetowych ASP.NET.
Zmień skrypt na
<img src="' + imagePath + 'chevron-large-right-grey.gif" alt="'.....
Mam stronę wzorcową dla każdego poziomu katalogu i to jest w zdarzeniu Page_Init
Dim vPath As String = ResolveUrl("~/Images/") Dim SB As New StringBuilder SB.Append("var imagePath = '" & vPath & "'; ") ScriptManager.RegisterClientScriptBlock(Me, Me.GetType(), "LoadImagePath", SB.ToString, True)
Teraz niezależnie od tego, czy aplikacja jest uruchomiona lokalnie, czy wdrożona, otrzymasz poprawną pełną ścieżkę
http://localhost:57387/Images/chevron-large-left-blue.png
źródło