Ho creato un MVC 4 utilizzando il modello predefinito, dove @Script.Render(~"bundles/jquery")
viene chiamato dopo @RenderBody()
. In base al post this, questo è l'ordine di esecuzione consigliato per impedire il caricamento di script per bloccare il rendering della pagina.Posizione corretta per caricare jQuery in MVC Vista layout
Desidero aggiungere una piccola chiamata jQuery nella mia visualizzazione o la mia sezione RenderBody()
. Ecco come si presenta, nella parte superiore del mio punto di vista:
<script type="text/javascript">
$(document).ready(function()
{
$("#eta_table").tablesorter({
headers: {
0: { sorter: false }
}
});
});
Tuttavia, questo sarà sempre buttare l'errore Error: '$' is undefined
perché jQuery non è caricato fino a dopo la RenderBody()
.
Non riesco a immaginare questo è un nuovo problema, sembra un compito abbastanza comune ... Qualche suggerimento su come questo dovrebbe essere gestito?
Per avere un riferimento, qui è dove il jQuery è caricato:
@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)
</body>
Modifica
ho finito per spostare lo script sopra in mio file scripts.js, e caricai sotto jQuery nella pagina di layout, in questo modo:
bundles.Add(new ScriptBundle("~/bundles/custom").Include(
"~/Scripts/Custom/tablesorter.js",
"~/Scripts/Custom/scripts.js"));
E il codice HTML:
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/custom")
@RenderSection("scripts", required: false)
</body>
Tranne questo sembra ancora sbagliata, come ora gli script sono costrette a caricare per ogni pagina che utilizza la visualizzazione Layout di master. Funziona, ma è questo il modo migliore?
O semplicemente utilizzare la sezione "script" esistente. –
Sì, la sezione "scripts" lo ha fatto. Non sapevo esattamente cosa stesse facendo, grazie per la lezione. Questo ha funzionato. – Tom
@ChrisPratt sì, è certamente vero. Ma mi piace usare la sezione "scripts" predefinita per le librerie che includono il rendering di script a riga singola, quindi ho creato la nuova sezione specificamente per lo script che avrei scritto solo su quella pagina. In effetti, farei un passaggio di refactoring per estrarre "MyScripts" in un file js separato per sfruttare il bundling. – Jasen