2014-05-20 8 views
9

Wenn ich eine MVC5 App erzeuge, hat die _Layout.cshtml die @Scripts.Render am Ende der Datei nach der @RenderBody(). Wenn ich ein .js in mein index.cshtml, das jquery verwendet, hinzufüge, bekomme ich den gefürchteten "$ ist undefined" Fehler.MVC5 Warum @ Scripts.Render unter @RenderBody in Standard _Layout.cshtml

Die einzige Möglichkeit, die ich beheben kann, ist die @Scripts.Render in den <head> Abschnitt verschieben.

Was ist der richtige Ansatz?

Vielen Dank im Voraus!

Antwort

12

@Scripts.Render sollte an der unteren der Seite sein. Andernfalls besteht die Gefahr, dass Sie auf Seitenelemente zugreifen, die zum Zeitpunkt der Skriptausführung nicht geladen wurden.

EDIT:

Wenn Sie Ihre eigene Skripte Dateien enthalten sein sollen, gibt es zwei Möglichkeiten, das zu tun:

. In dem BundleConfig.cs, ein neues Bundle für Ihre Skripte

*bundles.Add(new ScriptBundle("~/bundles/UserScripts").Include("~/Scripts/MyScripts.js"));* 

Als nächstes wird in dem _Layout.cshtml, machen Sie den Skript-Bundle nach jQuery-Bundle hinzufügen:

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

    @* Render the custom bundles *@ 
    @Scripts.Render("~/bundles/UserScripts") 

2. Oder fügen Sie einen neuen Skriptabschnitt zu Ihrem Index.cshtml hinzu:

@section scripts { 

    <script src="~/Scripts/MyScripts.js"></script>** 

} 
+0

Richtig Ich war mir ziemlich sicher, dass das so war. Aber das Javascript, das ich am Ende meines index.cshtml setzen: Da dies muss kommen vor der jquery js-datei, wie passiert das, wenn die js-datei, die ich hinzufüge, vor jquery enthalten ist? –

+0

@MikeWitt Bitte meine bearbeitete Version –

+0

Dank @ToanNguyen sehen, Ihre Antwort funktioniert gut. –

Verwandte Themen