web-dev-qa-db-fra.com

Le fichier "~ / Views / Position / Edit.cshtml" ne peut pas être demandé directement car il appelle la méthode "RenderSection"

J'essaie de séparer toutes les choses que je pourrais réutiliser en sections, il serait donc plus facile pour moi de maintenir.

Cependant, j'ai eu cette exception: le fichier "~/Views/Position/Edit.cshtml" ne peut pas être demandé directement car il appelle la méthode "RenderSection"

J'ai créé un fichier appelé sections.cshtml avec le contenu suivant:

@section scripts{
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
}

Et dans le fichier _layout.cshtml, je l'ai changé en:

<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    @RenderSection("scripts", required:false)
    @*<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>*@
</head>

Lorsque je vais dans la vue du navigateur et vérifie le code source, il ne montre que:

<head>
    <meta charset="utf-8" />
    <title>Edit</title>
    <link href="/Content/Site.css" rel="stylesheet" type="text/css" />
</head>
38
Luis Valencia

RenderSection ne peut exister que dans les fichiers de mise en page (c'est-à-dire les pages maîtres) ... son but est de permettre aux pages que vous pouvez demander directement de cibler différentes sections d'une mise en page (la mise en page étant un fichier commun à toutes les pages qui choisissent de l'utiliser) et de fournir le contenu de ces différentes sections.

Si vous souhaitez séparer cette section en tant que quelque chose qui est réutilisable sur de nombreuses pages, vous devez la mettre dans un partiel et remplacer l'appel de rendu par quelque chose comme

@Html.Partial("Scripts")
35
Martin Booth

Vous pouvez également utiliser helper pour séparer le code que vous utilisez plus souvent. Surtout si vous ne pouvez pas utiliser sections à cause de la contrainte mentionnée par Martin-Booth.

@helper Scripts(){
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
}

et l'utilisation est juste:

<somehtml />
@Scripts()
<somehtml />
13
Gerwald