it-swarm.com.de

Die folgenden Abschnitte wurden definiert, aber nicht für die Layoutseite "~ / Views / Shared / _Layout.cshtml" gerendert: "Scripts"

Ich bin neu in ASP MVC und benutze das Intro zu ASP MVC 4 Beta Tutorial http://www.asp.net/mvc/tutorials/mvc-4/einstieg in aspnet-mvc4/intro-to-aspnet-mvc-4

Ich stoße auf einen Fehler, auf den ich scheinbar keine Antwort finde, und ich habe auch nicht viel Programmiererfahrung. Daher weiß ich nicht, wo ich überhaupt anfangen soll, diesen Fehler zu beheben und mit dem Tutorial fortzufahren. Ich freue mich über jede Hilfe, die Sie leisten können.

Ich befinde mich im Abschnitt Auf die Daten Ihres Modells über einen Controller zugreifen und bekomme diese Fehlermeldung, 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).

Ich weiß, dass ich möglicherweise Code einschließen muss, um dies zu beantworten, aber ich bin mir nicht sicher, welchen Code ich überhaupt einschließen soll. Bitte teilen Sie mir mit, welchen Code ich gegebenenfalls einfügen muss. Gerne füge ich ihn meiner Frage hinzu.

Vielen Dank,

85
Kevin Dark

Dies bedeutet, dass Sie einen Abschnitt in Ihrer master-Datei Layout.cshtml definiert haben, aber nichts für diesen Abschnitt in Ihre Ansicht aufgenommen haben.

Wenn Ihre _Layout.cshtml ungefähr so ​​aussieht:

@RenderSection("scripts")

Dann enthalten alle Views, die dieses Layout verwenden muss einen @section Mit demselben Namen (auch wenn der Inhalt des Abschnitts leer ist):

@{
    ViewBag.Title = "Title";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@section scripts{
    // Add something here
}

Alternativ können Sie "required" auf "false" setzen. Dann müssen Sie den Abschnitt nicht in jeder Ansicht hinzufügen.

@RenderSection("scripts", required: false)

oder Sie können auch den @RenderSection in einen if Block einwickeln,

@if (IsSectionDefined("scripts"))
{
    RenderSection("scripts");
}
126
mgnoonan

Sie können auch die folgende Zeile zum _Layout.cshtml Oder _Layout.Mobile.cshtml Hinzufügen:

@RenderSection("scripts", required: false)
24

Ich hatte einen Fall mit 3 Ebenen a'la _ MainLayout.cshtml <--- _ Middle.cshtml <--- Page.cshtml . Auch wenn das so ist:

_ MainLayout.cshtml

<head>
   @RenderSection("head", false)
</head>

_ Middle.cshtml

@section head {
    @RenderSection("head")
}

und in Page.cshtml definieren

@section head {
   ***content***
}

Ich würde trotzdem den Fehler bekommen

Die folgenden Abschnitte wurden definiert, aber nicht für die Layoutseite "~/Views/Shared/_Middle.cshtml" gerendert: "head".

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:

@{
Layout = "~/Views/_Shared/_MainLayout.cshtml";
}

Ich kann mich nicht entscheiden, ob dies beabsichtigt ist oder ein Fehler in MVC 4 ist - trotzdem wurde das Problem gelöst :)

Ich bin nicht sicher, warum die akzeptierte Antwort akzeptiert wurde, wenn die vorgeschlagene Lösung das Problem nicht behebt. Es kann tatsächlich zwei verwandte Probleme geben, die mit diesem Thema zusammenhängen.

Ausgabe 1

Auf der Masterseite (z. B. _Layout.cshtml) Ist ein Abschnitt definiert und es ist erforderlich, aber die übernehmenden Ansichten haben ihn nicht implementiert. Beispielsweise,

Die Layoutvorlage

<body>
    @* Visible only to admin users *@
    <div id="option_box"> 
        @* this section is required due to the absence of the second parameter *@
        @RenderSection("OptionBox") 
    </div>
</body>

Die vererbende Ansicht

Es muss kein Code angezeigt werden. Denken Sie nur daran, dass in der Ansicht no@section OptionBox {} Implementiert ist.

Der Fehler für Ausgabe 1

Section not defined: "OptionBox ".

Ausgabe 2

Auf der Masterseite (z. B. _Layout.cshtml) Ist ein Abschnitt definiert, und es ist erforderlich UND die vererbende Ansicht hat implementiert. Die implementierende Ansicht hat jedoch zusätzliche script Abschnitte, die nicht definiert auf (einer) ihrer Masterseite (n).

Die Layoutvorlage

same as above

Die vererbende Ansicht

<div>
  <p>Looks like the Lakers can still make it to the playoffs</p>
</div>
@section OptionBox {
<a href"">Go and reserve playoff tickets now</a>
}
@section StatsBox {
<ul>
    <li>1. San Antonio</li>
    <li>8. L. A. Lakers</li>
</ul>
}

Der Fehler bei Ausgabe 2

The following sections have been defined but have not been rendered for the layout page "~/Views/Shared/_Layout.cshtml": "StatsBox"

Die Ausgabe des OP ähnelt der Ausgabe Nr. 2, und die akzeptierte Antwort bezieht sich auf Ausgabe Nr. 1.

9
von v.

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 die endgültige Aktionsseite gerendert. Main.cshtml <- Config.cshtml <- Action.cshtml

Erst als web.config customErrors='On/RemoteOnly' Hatte, kam es zu einem benutzerdefinierten Fehler und es wurde weder eine Ausnahme noch Application_Error Aufgerufen. Ich könnte dies in der Zeile Layout = null In der Error.cshtml abfangen. Ausnahme war wie in der Frage der fehlende Skriptabschnitt.

Wir haben es in Main.cshtml definiert (mit required: false) und in Action.cshtml gab es nichts, was in den Skriptabschnitt geschrieben hätte.

Die Lösung bestand darin, @section scripts { @RenderSection("scripts", false) } zu Config.cshtml hinzuzufügen.

8
Pasi Savolainen

Es tritt grundsätzlich auf, wenn _Layout.cshtml ohne:

@RenderSection("scripts", required: false)

oder mit

@RenderSection("scripts")  

OHNE

required: false

Fügen Sie einfach @RenderSection ("Skripte", erforderlich: false) in _Layout.cshtml hinzu und es funktioniert speziell für Entwickler, die mit Kendoui generierten Projekten arbeiten.

7
JMJ

Es scheint, dass es einen Konflikt zwischen den Ansichtsdateien gibt, die einige Versionen von Visual Studio automatisch für Sie generieren, wenn Sie sie zum Erstellen eines neuen Modells verwenden. Ich bin auf dieses Problem gestoßen, indem ich neue VS 2013 Community Edition und das W3Schools-Tutorial unter http://www.w3schools.com/aspnet/mvc_app.asp durchgegangen bin, aber die Kommentare Oben ist angegeben, dass dies kein Problem mit den Anleitungen für das Lernprogramm oder mit einer einzelnen Version von VS ist.

Es ist wahr, dass Sie die Fehlermeldung beseitigen können , indem Sie einfach das entfernen

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

zeile aus den Layouts erstellen/bearbeiten, die von Visual Studio automatisch generiert wurden.

Diese Lösung behebt jedoch weder die eigentliche Ursache, noch bietet sie Ihnen die Möglichkeit, mehr zu tun, als das Lernprogramm durchzuarbeiten. Irgendwann (wahrscheinlich ziemlich früh) in der Entwicklung einer echten Anwendung möchten Sie Zugriff auf den JQuery-Validierungscode, den die Auskommentierungslösung aus Ihrer App entfernt.

Wenn Sie mit VS ein neues Modell für Sie erstellen, werden auch fünf Ansichtsdateien erstellt: Erstellen, Löschen, Details, Bearbeiten und Index. Zwei dieser Ansichten, Erstellen und Bearbeiten, ermöglichen dem Benutzer das Hinzufügen/Bearbeiten von Daten für die Felder in Datenbankdatensätzen, die dem Modell zugrunde liegen. Für diese Ansichten in einer echten App möchten Sie wahrscheinlich eine gewisse Datenvalidierung mithilfe der Bibliothek für die jquery-Validierung durchführen, bevor Sie den Datensatz in der Datenbank speichern. Deshalb fügt VS die folgenden Zeilen hinzu

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

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 gemeinsam genutzten Datei _Layout.cshtml entweder keine entsprechende Zeile hinzufügt oder sie, wie in einer Antwort oben angegeben, hinzufügt, aber auskommentiert lässt. Diese Linie ist

@RenderSection("scripts", required: false)

Wenn einige Ihrer Ansichten über einen Skriptabschnitt verfügen (wie dies beim Erstellen und Bearbeiten der Fall ist), muss ein RenderSection-Befehl im Layout eingebettet sein. Wenn einige Skripte den Abschnitt haben und einige nicht (wie Löschen, Details und Index nicht), muss der RenderSection-Befehl den Parameter required: false Haben.

Wenn Sie also mehr als nur das Lernprogramm durcharbeiten möchten, sollten Sie die Anweisung zu _Layout.cshtml hinzufügen und den Code nicht aus den Ansichten Bearbeiten und Erstellen entfernen.

P.S. Es ist ein bisschen verwirrend, dass das, was benötigt wird, in einem 'Bundle' ist und die require-Anweisung so aussieht, als würde sie versuchen, eine Datei in einen Bundle-Ordner aufzunehmen, der in Ihrem Projekt nicht existiert. Für Debugbuilds 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 Code, um den es hier geht, wird in etwa zwei Dritteln der gesamten Seite kurz erwähnt .

6
Anne Gunn

Beim Durcharbeiten des ASP.NET MVC 4-Lernprogramms mit Visual Studio 2012 ist derselbe Fehler im Abschnitt "Zugreifen auf die Daten Ihres Modells über einen Controller" 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 ist der Abschnitt "Skripts" auskommentiert.

    @*@RenderSection("scripts", required: false)*@

Entfernen Sie einfach den Kommentar aus der Zeile und der Beispielcode sollte funktionieren.

    @RenderSection("scripts", required: false)
2
Rick M.

Ich habe das gleiche Problem beim Implementieren eines Tutorials für MVC-Anfänger. Ich habe verschiedene Vorschläge zum Ändern des @RenderSection in Ihrer layout.cshtml-Datei, aber ich habe es 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

**@section Scripts {
@Scripts.Render("~/bundles/jqueryval")

} **

Also habe ich diese Zeilen entfernt und die Anwendung läuft reibungslos.

1
Tejas Sawant

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 Renderbereich verpassen, wird derselbe Fehler angezeigt. Ich möchte dies für zukünftige Anfänger teilen.

 @RenderSection("headscripts", required: false)
0
CodeName47

Ich habe das Gefühl, dass Sie Ihren Abschnitt aus einem @ -Abschnitt in der _Layout-Datei rendern, der sich auf eine Teilansicht mit einem @ -Abschnitt bezieht, d. H., Sie haben einen @ -Abschnitt in einem @ -Abschnitt verschachtelt. Entfernen Sie in der _Layout-Datei den @ -Abschnitt um den Render-Abschnitt.

0

Stellen Sie sicher, dass Sie die korrekte Schreibweise für den Skriptabschnitt in der Ansicht eingegeben haben

das richtige ist

@section scripts{ //your script here}

wenn du @section script{ //your script here} das ist falsch.

0
user5093161

Ich habe dieses Problem folgendermaßen gelöst:

@await Html.PartialAsync("_ValidationScriptsPartial")
0
Héctor Borrego