2012-11-27 10 views
6

Ich arbeite an einem ASPNET MVC 4-Projekt mit jqgrid.Jquery Skripts Reihenfolge in ASPNET MVC 4 Anwendung

Dort ASPNET MVC 4 setzt standardmäßig am Ende des es

@Scripts.Render("~/bundles/jquery") 

in _Layout.cshtml Datei.

Jetzt habe ich ein Index.cshtml die

<script type="text/javascript"> 
    jQuery("#ajaxGrid").jqGrid({ 

jqGrid wie verwendet Also muss ich jqGrid Skripte wie

@section jqgridScripts 
{ 
    <script src="@Url.Content("~/Scripts/jqgrid/i18n/grid.locale-en.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jqgrid/js/jquery.jqGrid.min.js")" type="text/javascript"></script> 
} 

Aber bevor mit irgendetwas mit .jqgrid I der jqGrid Skripte geladen müssen die wiederum benötigt jquery scripts geladen, also müssen jquery scripts ganz oben stehen und nicht am ende der Datei _Layout.cshtml.

Laut Best Practices muss jquery scripts am Ende der Datei geladen werden, aber wenn ich das tue, weiß es in der Datei Index.cshtml nicht, was jQuery ist.

Ich kann jqquery-Skripte und unterhalb von jqgrid-Skripten nicht am Ende der Datei _Layout.cshtml ablegen, da darüber der Inhalt der Datei Index.cshtml liegt, der jqgrid-Skripte verwendet.

Gibt es etwas, was ich vermisse, um jQuery am Ende zu setzen und trotzdem etwas mit jquery in der Ansicht verwenden zu können?

Danke! Guillermo.

Antwort

13

__Layout.cshtml:

@Scripts.Render("~/bundles/jquery") 
@RenderSection("jqgridScripts", required: false); 

@* for script in current page *@ 
@RenderSection("pageScripts", required: false); 

Index.cshtml:

@section pageScripts 
{ 
<script type="text/javascript"> 
    jQuery("#ajaxGrid").jqGrid({ 
    ... 
</script> 
} 

Aber die beste Praxis eine separate JavaScript-Datei mit Ihrem Code, wie diese zu haben wäre:

__Layout.cshtml:

@Scripts.Render("~/bundles/jquery") 
@RenderSection("pageScripts", required: false); 

Index.cshtml:

@section pageScripts 
{ 
    <script src="@Url.Content("~/Scripts/jqgrid/i18n/grid.locale-en.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jqgrid/js/jquery.jqGrid.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/Site/myscript.js")" type="text/javascript"></script> 
} 

MyScript.js:

$(function() { 

    jQuery("#ajaxGrid").jqGrid({ ... }); 

}); 
2

Ich habe dieses Problem auch aufgetreten. Es scheint irgendwie kontraintuitiv zu sein, jQuery selbst nicht zu bündeln, aber es muss getan werden. Werfen Sie einen jQuery-Skriptverweis in die Kopfzeile. Wenn Sie das jQuery-Skript src-Attribut auf das der minimierten google-gehosteten Instanz setzen, ist die Wahrscheinlichkeit hoch, dass das Skript ohnehin in Ihrem Client zwischengespeichert ist.

Here is a nice reference...

Verwandte Themen