web-dev-qa-db-ja.com

ファイル「〜/ Views / Position / Edit.cshtml」は、「RenderSection」メソッドを呼び出すため、直接要求できません

セクションで再利用できるものをすべて分離しようとしているので、メンテナンスしやすくなります。

しかし、この例外が発生しました:ファイル「〜/ Views/Position/Edit.cshtml」は、「RenderSection」メソッドを呼び出すため、直接要求できません

次のコンテンツを含むsections.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>
38
Luis Valencia

RenderSectionは、レイアウトファイル(つまり、マスターページ)にのみ存在できます...その目的は、レイアウトのさまざまなセクションをターゲットに直接リクエストできるページを許可することです(レイアウトは、使用することを選択したすべてのページに共通のファイルです)。これらのさまざまなセクションのコンテンツ。

このセクションを多くのページで再利用可能なものとして分離したい場合は、パーシャルに入れて、rendersection呼び出しを次のようなものに置き換えてください。

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

または、helperを使用して、使用頻度の高いコードを分離することもできます。特に、Martin-Boothが言及した制約のために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 />
13
Gerwald