2009-04-08 18 views
39

Nie mam żadnych problemów podczas korzystania z JQuery na stronie aspx bez strony głównej, ale kiedy próbuję użyć go na stronach z masterpage, to nie działa, więc kończę umieszczanie plików jquery i innych plików skryptu na stronie zamiast wzorca. Teraz, jeśli mam 10 stron, robię to dla wszystkich 10, o których wiem, że jest niepoprawna. W przykładowej głównej stronie, gdzie chciałbym umieścić moje pliki skryptów.Właściwy sposób korzystania z JQuery przy użyciu MasterPages w ASP.NET?

<html> 
<head runat="server"> 
    <asp:ContentPlaceHolder ID="head" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 
<body> 
    <asp:ContentPlaceHolder ID="ContentPanel" runat="server"> 
    </asp:ContentPlaceHolder>    
</body> 
</html> 

Niedawno używane wtyczki fancybox i co zrobiłem było zamiast uczynić jQuery skrypt i fancybox skryptów w masterpage bo mam sfrustrowany na uzyskanie go do pracy, ja po prostu umieścić go na stronie, gdzie chciałem skrypt do uruchomienia, szczególnie na dole, tuż przed zamykającym asp: Treść. Oczywiście, teraz mam problem, jeśli chciałem użyć wtyczki fancybox na innych stronach, umieściłbym skrypt jquery i skrypt fancybox na wszystkich 5 stronach zamiast tylko strony głównej. Kiedy zajmujesz się stroną główną, gdzie wszystko przebiega za pomocą mojego przykładu powyżej?

Odpowiedz

54

byłoby zadeklarować swoje główne skrypty jQuery obrębie strony głównej, tak jak zwykle:

<head runat="server"> 
    <link href="/Content/Interlude.css" rel="Stylesheet" type="text/css" /> 
    <script type="text/javascript" src="/Scripts/jquery-1.3.2.min.js"></script> 
    <asp:ContentPlaceHolder ID="head" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 

A potem dowolną stronę konkretne pliki JS można załadować w ramach kontroli treści, które odwołują się do Naczelnej ContentPlaceHolder.

Jednak lepszym rozwiązaniem byłoby przejrzenie elementów sterujących ScriptManager i ScriptManagerProxy - mogą one zapewnić o wiele większą kontrolę nad sposobem przesyłania plików JS do klienta.

Tak byłoby umieścić formant ScriptManager w opanujesz stronę i dodać odniesienie do kodu rdzenia jQuery, że:

<body> 
    <form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
     <Scripts> 
     <asp:ScriptReference Path="/Scripts/jquery-1.3.2.min.js" /> 
     </Scripts> 
    </asp:ScriptManager> 

Następnie na swojej stronie, że wymaga pewnych niestandardowych plików JS lub jQuery wtyczki, można mieć:

<asp:Content ID="bodyContent" ContentPlaceholderID="body"> 
    <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server"> 
     <Scripts> 
     <asp:ScriptReference Path="/Scripts/jquery.fancybox-1.2.1.pack.js" /> 
     </Scripts> 
    </asp:ScriptManagerProxy> 

Menedżer skryptów pozwala robić rzeczy jak kontrola gdzie na skryptach stronie są renderowane z LoadScriptsBeforeUI (albo jeszcze lepiej, po przez ustawienie go na False).

2

Do skryptu użyj innego obiektu contentplaceholder. Powinien on wyglądać następująco

<script type="text/javascript" src="myscript.js" /> 
<asp:ContentPlaceHolder ID="ScriptContent" runat="server"> 

</asp:ContentPlaceHolder> 

Umieść ten tag w dolnej części masterpage, blisko tagu </body>. To pozwoli ci dodawać skrypty na stronie głównej, a także na twoich stronach. Upewnij się, że twoje skrypty ładują się we właściwej kolejności, wyświetlając źródło strony i zapewniając, że HTML jest renderowany we właściwy sposób. Powodzenia.

Jeszcze jedno, upewnij się, że jQuery, a następnie FancyBox ładują się przed jakimkolwiek innym, który możesz mieć, inaczej nie będzie działać. Javascript ładuje się w kolejności, w której został wywołany, jQuery musi załadować najpierw!

+0

Czy ładowanie javascript jest ładowane przed znacznikami html? – Xaisoft

8

Używam tej metody.

<script type="text/javascript" language="javascript" src='<%=ResolveUrl("~/scripts/jquery.js") %>' ></script> 

Po prostu umieść go nad tagiem ...

<asp:ContentPlaceHolder ID="head" runat="server"> 
    </asp:ContentPlaceHolder> 
+0

+1, ale otrzymałem ostrzeżenie, gdy dołączę atrybut językowy z informacją o nieprawidłowym atrybucie –

+0

Preferuję ten, ponieważ nie wymaga ScriptManager ani dodatkowego komponentu. –

0

to co będzie działać wewnątrz stronie Master:

dla pliku skryptu:

<script type="text/javascript" src="<%= ResolveUrl("~/script/scriptFile.min.js") %>"></script> 

Dla pliku CSS:

<link rel="stylesheet" href="~/styles/CssFile.min.css" runat="server" /> 

dodatkowego nie ES:

  1. pomocą minified wersje jak mógł, jak to możliwe (FileName.min.js) i (FileName.min.css) w celu zmniejszenia czasu ładowania i poprawy SEO.
  2. Umieść kod CSS przed </head> i skrypt przed </body> do poprawić wydajność i poprawić SEO.
  3. Znak w postaci kafelka (~) w ścieżce zostanie automatycznie rozwiązany w katalogu głównym witryny.
  4. Nie zapomnij użyć runat="server" tylko dla arkusza stylów. Skrypt nie może mieć runat="server", ponieważ już korzysta z operatorów serwerów <%= %>.
  5. Możesz użyć trybu online http://jscompress.com/, aby skompresować swój javascript i https://csscompressor.net/, aby skompresować pliki CSS.
Powiązane problemy