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

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

Однако я получил это исключение: файл "~ / 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>

Ответы [ 2 ]

35 голосов
/ 18 октября 2011

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

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

@Html.Partial("Scripts")
13 голосов
/ 29 марта 2012

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

@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 />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...