Подтвердить что ты не робот

Файл "~/Views/Position/Edit.cshtml" не может быть запрошен напрямую, поскольку он вызывает метод "RenderSection"

Я пытаюсь отделить все вещи, которые я мог бы повторно использовать в разделах, поэтому мне было бы легче поддерживать.

Однако я получил это исключение: Файл "~/Views/Position/Edit.cshtml" не может быть запрошен напрямую, потому что он вызывает метод "RenderSection"

Я создал файл section.cshtml со следующим содержимым:

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

И в файле _layout.cshtml я изменил его на:

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

Когда я перехожу к просмотру в браузере и проверяю только исходный код:

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

Ответ 1

RenderSection может существовать только в файлах макета (то есть мастер-страницах)... его цель - разрешить страницы, на которые вы можете запросить напрямую, для ориентации различных разделов макета (макет - это файл, общий для всех страниц, которые предпочитают использовать его ) и поставлять контент для этих разных разделов.

Если вы хотите разделить этот раздел как нечто, что можно устранить на многих страницах, вы должны поместить его в частичное и заменить вызов rendersection на что-то вроде

@Html.Partial("Scripts")

Ответ 2

В качестве альтернативы вы можете использовать helper для разделения кода, который вы используете чаще всего. Особенно, если вы не можете использовать sections из-за упомянутого ограничения martin-mooth.

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

и использование просто:

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