Файл "~/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>
Ответы
Ответ 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 />