122 votes

Les sections suivantes ont été définies mais n'ont pas été rendues pour la page de présentation "~/Views/Shared/_Layout.cshtml" : "scripts"

Je suis novice en ASP MVC et j'utilise le tutoriel Intro to ASP MVC 4 Beta. http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4

Je rencontre une erreur à laquelle je n'arrive pas à trouver de réponse et je n'ai pas beaucoup d'expérience en programmation. Je ne sais donc pas par où commencer pour résoudre ce problème et poursuivre le tutoriel. Je vous remercie de l'aide que vous pourrez m'apporter.

Je suis dans la section Accessing Your Model's Data from a Controller et j'obtiens cette erreur lorsque j'essaie de créer un film dans le cadre du tutoriel, je clique sur le lien "Create New" et j'obtiens l'erreur suivante

Les sections suivantes ont été définies mais n'ont pas été rendues pour la page de présentation > "~/Views/Shared/_Layout.cshtml" : "scripts"

Plutôt que d'utiliser Visual Studio express, j'ai choisi de télécharger Visual Studio 2012 RC (je ne suis pas sûr que ce soit la cause première de mon problème).

Je sais que vous pouvez me demander d'inclure du code pour répondre à cette question, mais je ne suis pas sûr du code à inclure. Veuillez m'indiquer le code que vous souhaitez que j'inclue, le cas échéant, et je me ferai un plaisir de l'ajouter à ma question.

Nous vous remercions,

168voto

mgnoonan Points 4115

Cela signifie que vous avez défini une section dans le fichier Layout.cshtml, mais que vous n'avez rien inclus pour cette section dans votre View.

Si votre _Layout.cshtml a quelque chose comme ceci :

@RenderSection("scripts")

Ensuite, toutes les vues qui utilisent cette mise en page doit inclure un @section portant le même nom (même si le contenu de la section est vide) :

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

En guise d'alternative, vous pouvez définir la valeur "required" sur "false", ce qui vous évitera d'ajouter la section dans chaque vue,

@RenderSection("scripts", required: false)

ou vous pouvez également envelopper le @RenderSection dans un if bloc,

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

30voto

J'ai eu un cas avec 3 niveaux à la _. MainLayout.cshtml <--- _ Milieu.cshtml <--- Page.cshtml . Même en faisant cela :

_MainLayout.cshtml

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

Moyen.cshtml

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

et en Page.cshtml définissant

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

J'obtiens toujours l'erreur

Les sections suivantes ont été définies mais n'ont pas été rendues pour la page de présentation "~/Views/Shared/_Middle.cshtml" : "head".

Il s'est avéré que l'erreur concernait le Milieu.cshtml s'appuyer sur /Views/_ViewStart.cshtml pour résoudre son schéma parent. Le problème a été résolu en définissant ceci dans Milieu.cshtml explicitement :

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

Je ne sais pas si c'est une conception ou un bug dans MVC 4 - en tout cas, le problème est résolu :)

27voto

Vous pouvez également ajouter la ligne suivante au fichier _Layout.cshtml o _Layout.Mobile.cshtml :

@RenderSection("scripts", required: false)

15voto

von v. Points 7165

Je ne sais pas pourquoi la réponse acceptée a été acceptée si la solution suggérée n'a pas résolu et ne résout pas le problème. Il peut en fait y avoir deux problèmes liés à ce sujet.

Numéro 1

La page maîtresse (par exemple _Layout.cshtml ) a une section définie qui est requis mais les vues qui en ont hérité ne l'ont pas mise en œuvre. Par exemple,

Le modèle de présentation

<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>

Le point de vue de l'héritier

Il n'est pas nécessaire de montrer le code, il suffit de considérer qu'il y a non la mise en œuvre de @section OptionBox {} sur la vue.

L'erreur pour le numéro 1

Section not defined: "OptionBox ".

Numéro 2

La page maîtresse (par exemple _Layout.cshtml ) a une section définie qui est requis ET la vue héritée a fait le mettre en œuvre. Toutefois, le point de vue de la mise en œuvre a des script sections qui ne sont pas définis sur sa (ses) page(s) maîtresse(s).

Le modèle de présentation

same as above

Le point de vue de l'héritier

<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>
}

L'erreur pour le numéro 2

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

Le problème soulevé par l'OP est similaire au problème n° 2 et la réponse acceptée est celle du problème n° 1.

10voto

Pasi Savolainen Points 1489

Je pense que notre solution était suffisamment différente de celle des autres pour que je la documente ici.

Nous disposons d'une mise en page principale, d'une mise en page intermédiaire et d'un rendu de la page d'action finale. Main.cshtml <- Config.cshtml <- Action.cshtml

Uniquement lorsque le fichier web.config contenait customErrors='On/RemoteOnly' nous avons obtenu une erreur personnalisée et aucune exception ni Application_Error a été appelé. J'ai pu le voir à l'émission Layout = null dans le fichier Error.cshtml. L'exception était, comme dans la question, la section scripts manquante.

Nous l'avons défini dans Main.cshtml (avec required:false) et Action.cshtml n'a rien écrit dans la section scripts.

La solution a consisté à ajouter @section scripts { @RenderSection("scripts", false) } à Config.cshtml.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X