Ich bin neu in ASP MVC und verwende das Beta-Tutorial zur Einführung in ASP MVC 4 http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet -mvc-4
Ich stoße auf einen Fehler, auf den ich anscheinend keine Antwort finde, und ich habe auch nicht viel Programmiererfahrung. Daher weiß ich nicht, wo ich anfangen soll, dies zu beheben, um mit dem Tutorial fortzufahren. Ich freue mich über jede Hilfe, die Sie leisten können.
Ich bin im Abschnitt Zugriff auf die Daten Ihres Modells von einem Controller aus und erhalte diesen Fehler, wenn ich versuche, einen Film als Teil des Tutorials zu erstellen. Ich klicke auf den Link "Neu erstellen" und erhalte die folgende Fehlermeldung
Die folgenden Abschnitte wurden definiert, aber nicht für die Layoutseite> "~ / Views / Shared / _Layout.cshtml" gerendert: "Scripts"
Anstatt Visual Studio Express zu verwenden, habe ich mich für das Herunterladen von Visual Studio 2012 RC entschieden (nicht sicher, ob dies die Hauptursache für mein Problem ist.
Mir ist klar, dass ich möglicherweise Code einfügen muss, um dies zu beantworten, aber ich bin mir nicht sicher, welchen Code ich überhaupt einschließen soll. Bitte geben Sie an, welchen Code ich gegebenenfalls einfügen muss, und ich werde ihn gerne zu meiner Frage hinzufügen.
Danke dir,
quelle
@section
die NICHT im Layout (mitRenderSection
) gerendert wird . Dies kann auftreten, wenn Sie auf das Falsche verwiesen habenLayout
oder vergessen haben, überhaupt auf ein Layout zu verweisen. Siehe @ vonvs AntwortAntworten:
Dies bedeutet, dass Sie einen Abschnitt in Ihrer Master-Layout.cshtml definiert haben, aber nichts für diesen Abschnitt in Ihre Ansicht aufgenommen haben.
Wenn Ihre _Layout.cshtml so etwas hat:
Dann müssen alle Ansichten, die dieses Layout verwenden, eine
@section
mit demselben Namen enthalten (auch wenn der Inhalt des Abschnitts leer ist):Alternativ können Sie erforderlich auf false setzen, dann müssen Sie den Abschnitt nicht in jeder Ansicht hinzufügen.
oder Sie können das auch
@RenderSection
in einenif
Block einwickeln ,quelle
, required: false)
Making es@RenderSection("scripts", required: false)
ermöglicht, es aufzunehmen oder nicht.@RenderSection("scripts", required: false)
das Einfügen in die generierte _Layout.cshtml die richtige Lösung ist. (Siehe Diskussion unten, warum.) Auf diese Weise können Sie den Fix in einer Datei hinzufügen, nicht in allen - einem viel trockeneren Fix.Sie können dem
_Layout.cshtml
oder auch die folgende Zeile hinzufügen_Layout.Mobile.cshtml
:quelle
Ich hatte einen Fall mit 3 Ebenen a'la _ MainLayout.cshtml <--- _ Middle.cshtml <--- Page.cshtml . Auch wenn ich das so mache:
_MainLayout.cshtml
_Middle.cshtml
und in Page.cshtml definieren
Ich würde immer noch den Fehler bekommen
Es stellte sich heraus, dass der Fehler darin bestand, dass Middle.cshtml sich auf /Views/_ViewStart.cshtml stützte , um das übergeordnete Layout aufzulösen. Das Problem wurde behoben, indem dies in Middle.cshtml explizit definiert wurde:
Ich kann mich nicht entscheiden, ob dies beabsichtigt oder ein Fehler in MVC 4 ist - das Problem wurde sowieso gelöst :)
quelle
@section Foo {@RenderSection("Foo")}
die Abschnitte "weitergeben"! Musste auch den Körper mit weitergeben@RenderBody()
.Ich bin nicht sicher, warum die akzeptierte Antwort akzeptiert wurde, wenn die vorgeschlagene Lösung das Problem nicht gelöst hat und nicht löst. Es kann tatsächlich zwei verwandte Probleme geben, die mit diesem Thema zusammenhängen.
Fehler 1
Auf der Masterseite (z. B.
_Layout.cshtml
) ist ein Abschnitt definiert, der erforderlich ist , von den geerbten Ansichten jedoch nicht implementiert wurde. Beispielsweise,Die Layoutvorlage
Die ererbende Ansicht
Sie müssen keinen Code anzeigen. Beachten Sie jedoch, dass die Ansicht nicht implementiert ist
@section OptionBox {}
.Der Fehler für Problem Nr. 1
Section not defined: "OptionBox ".
Problem Nr. 2
Auf der Masterseite (z. B.
_Layout.cshtml
) ist ein Abschnitt definiert erforderlich , UND die erbende Ansicht hat ihn implementiert. Die Implementierungsansicht enthält jedoch zusätzlichescript
Abschnitte, die nicht auf (einer) ihrer Masterseiten definiert sind .Die Layoutvorlage
same as above
Die ererbende Ansicht
Der Fehler für Problem Nr. 2
The following sections have been defined but have not been rendered for the layout page "~/Views/Shared/_Layout.cshtml": "StatsBox"
Das Problem des OP ähnelt Problem Nr. 2 und die akzeptierte Antwort bezieht sich auf Problem Nr. 1.
quelle
Ich denke, unsere Lösung war ausreichend anders als alle anderen, deshalb werde ich sie hier dokumentieren.
Wir haben das Hauptlayout eingerichtet, ein Zwischenlayout und dann das endgültige Rendern der Aktionsseite. Main.cshtml <- Config.cshtml <- Action.cshtml
Erst als web.config
customErrors='On/RemoteOnly'
einen benutzerdefinierten Fehler hatte und keine Ausnahme nochApplication_Error
aufgerufen wurde. Ich könnte das verstehenLayout = null
online in der Error.cshtml abfangen. Ausnahme war wie in der Frage, fehlende Skripte Abschnitt.Wir haben es in Main.cshtml definiert (mit erforderlich: false) und Action.cshtml hatte nichts, was in den Skriptabschnitt geschrieben wurde.
Die Lösung bestand darin
@section scripts { @RenderSection("scripts", false) }
, Config.cshtml hinzuzufügen .quelle
Es tritt grundsätzlich auf, wenn _Layout.cshtml ohne ist:
oder mit
OHNE
Fügen Sie einfach @RenderSection ("Skripte", erforderlich: false) in _Layout.cshtml hinzu und es funktioniert speziell für Entwickler, die mit generierten Kendoui-Projekten arbeiten.
quelle
Es scheint, dass zwischen den Ansichtsdateien, die einige Versionen von Visual Studio automatisch für Sie generieren, wenn Sie damit ein neues Modell erstellen, eine Nichtübereinstimmung besteht. Ich habe dieses Problem mit der neuen VS 2013 Community Edition festgestellt und bin durch das W3Schools-Tutorial unter http://www.w3schools.com/aspnet/mvc_app.asp gegangen obigen Kommentare weisen jedoch darauf hin, dass es kein Problem mit den Anweisungen des Tutorials oder mit a ist Einzelversion von VS.
Es ist wahr , dass Sie die Fehlermeldung machen weggehen die nur durch das Entfernen
@Scripts.Render("~/bundles/jqueryval")
Zeile aus den Layouts zum Erstellen / Bearbeiten, die von Visual Studio automatisch generiert wurden.
Diese Lösung behebt jedoch nicht die Grundursache und lässt Sie nicht an einem guten Ort zurück, um mehr zu tun, als das Tutorial zu Ende zu gehen. Irgendwann (wahrscheinlich ziemlich früh) in der Entwicklung einer echten Anwendung möchten Sie Zugriff auf den JQuery-Validierungscode, den die auskommentierende Lösung aus Ihrer App entfernt.
Wenn Sie mit VS ein neues Modell für Sie erstellen, werden außerdem fünf Ansichtsdateien erstellt: Erstellen, Löschen, Details, Bearbeiten und Indexieren. Mit zwei dieser Ansichten, Erstellen und Bearbeiten, kann der Benutzer Daten für die Felder in Datenbankeinträgen hinzufügen / bearbeiten, die dem Modell zugrunde liegen. Für diese Ansichten in einer realen App möchten Sie wahrscheinlich eine gewisse Datenüberprüfung mithilfe der jquery-Überprüfungsbibliothek durchführen, bevor Sie den Datensatz in der Datenbank speichern. Aus diesem Grund fügt VS die folgenden Zeilen hinzu
auf den Grund dieser beiden Ansichten und nicht andere. Der automatisch generierte Code versucht, die Validierungsbibliothek für diese Ansichten verfügbar zu machen, nicht jedoch für die anderen.
Der Fehler tritt auf, weil VS der freigegebenen Datei _Layout.cshtml entweder keine entsprechende Zeile hinzufügt oder, siehe eine Antwort oben, diese hinzufügt, sie jedoch auskommentiert. Diese Zeile ist
@RenderSection("scripts", required: false)
Wenn einige Ihrer Ansichten einen Skriptabschnitt enthalten (wie beim Erstellen und Bearbeiten), muss ein RenderSection-Befehl in das Layout eingebettet sein. Wenn einige Skripte den Abschnitt haben und andere nicht (wie Löschen, Details und Index nicht), muss der Befehl RenderSection den
required: false
Parameter haben.Die beste Lösung, wenn Sie mehr als nur das Tutorial beenden möchten, besteht darin, die Anweisung zu _Layout.cshtml hinzuzufügen und den Code nicht aus den Ansichten Bearbeiten und Erstellen zu entfernen.
PS: Es ist ein bisschen verwirrend, dass sich das, was benötigt wird, in einem 'Bundle' befindet und die require-Anweisung so aussieht, als würde versucht, eine Datei in einen Bundles-Ordner aufzunehmen, der in Ihrem Projekt nicht vorhanden ist. Für Debug-Builds und Tutorials ist dies jedoch nicht relevant, da die gebündelten Dateien einzeln enthalten sind. Siehe: http://www.asp.net/mvc/overview/performance/bundling-and-minification Der hier in Rede stehende Code wird kurz auf etwa zwei Dritteln der Seite erwähnt.
quelle
Beim Durcharbeiten des ASP.NET MVC 4-Lernprogramms mit Visual Studio 2012 ist derselbe Fehler im Abschnitt "Zugreifen auf die Daten Ihres Modells von einem Controller aus" aufgetreten. Das Update ist ganz einfach.
Beim Erstellen einer neuen ASP.NET MVC 4-Webanwendung in Visual Studio 2012 im Dokument _Layout.cshtml im freigegebenen Ordner wird der Abschnitt "Skripte" auskommentiert.
Kommentieren Sie einfach die Zeile aus und der Beispielcode sollte funktionieren.
quelle
Ich habe das gleiche Problem bei der Implementierung eines Tutorials für MVC-Anfänger. Ich habe verschiedene Vorschläge erhalten, um den @RenderSection in Ihrer Datei layout.cshtml zu ändern, aber ich habe ihn nicht verwendet.
Ich habe viel gesucht und dann festgestellt, dass das in einer (View / Edit.cshtml) und einer anderen cshtml-Datei generierte Skript-Tag nicht gerendert wird
} **
Also habe ich diese Zeilen entfernt und die Anwendung läuft reibungslos.
quelle
Ich habe auch ** @ section Scripts kommentiert, da es reibungslos läuft. :) :)
quelle
Ich habe im Web nach dem Fehler gesucht und bin auf diese Seite gekommen. Ich verwende Visual Studio 2015 und dies ist mein erstes MVC-Projekt.
Wenn Sie das @ -Symbol vor dem Renderabschnitt verpassen, wird der gleiche Fehler angezeigt. Ich möchte dies für zukünftige Anfänger teilen.
quelle
Ich habe das Gefühl, dass Sie Ihren Abschnitt aus einem @ Abschnitt in der _Layout-Datei rendern, der auf eine Teilansicht mit einem @ Abschnitt verweist, dh Sie haben einen @ Abschnitt in einem @ Abschnitt verschachtelt. Entfernen Sie in der _Layout-Datei den @ -Abschnitt um den Renderabschnitt.
quelle
Ich habe dieses Problem folgendermaßen gelöst:
quelle
Für mich war das Problem in meiner _Layout.cshtml Ich habe RenderSection in einer Bedingung
und aus meiner kindlichen Sicht war es bedingungslos
Unabhängig vom Thema fügte das Kind die Fußzeile hinzu. Aber im übergeordneten Element, wenn das Thema nicht rot oder grün ist, wurde die Fußzeile nicht hinzugefügt, und es wurde eine nicht übergebene Ausnahme ausgelöst.
quelle
Überprüfen Sie die Schreibweise und den Groß- / Kleinbuchstaben des Ausdrucks ""
Wenn wir @RenderSection schreiben ("Name", erforderlich: false), stellen Sie sicher, dass die Rasiereransicht einen Abschnitt @Section name {} enthält. Überprüfen Sie daher die Schreibweise und den Groß- / Kleinbuchstaben des Begriffs "". In diesem Fall ist "Scripts" korrekt.
quelle
Bitte stellen Sie sicher, dass Sie die korrekte Schreibweise für die Verwendung des Skriptabschnitts in der Ansicht eingegeben haben
das richtige ist
Wenn Sie eingegeben
@section script{ //your script here}
haben, ist dies falsch.quelle