次のセクションは定義されていますが、レイアウトページ「〜/ Views / Shared / _Layout.cshtml」用にレンダリングされていません:「スクリプト」


100

ASP MVCは初めてで、Intro to ASP MVC 4ベータチュートリアルhttp://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnetを利用しています。 -mvc-4

答えが見つからないようなエラーが発生したり、プログラミングの経験があまりないので、チュートリアルでこれを修正するためのどこから始めればよいのかわかりません。あなたが提供できるどんな助けにも感謝します。

「コントローラからモデルのデータにアクセスする」セクションにいて、チュートリアルの一部としてムービーを作成しようとすると、このエラーが発生します。「新規作成」リンクをクリックすると、次のエラーが発生します

次のセクションは定義されていますが、レイアウトページにはレンダリングされていません> "〜/ Views / Shared / _Layout.cshtml": "Scripts"

Visual Studio Expressを使用する代わりに、Visual Studio 2012 RCをダウンロードすることを選択しました(それが私の問題の根本的な原因かどうかはわかりません)。

これに答えるためにコードを含める必要があるかもしれませんが、含めるコードすらわかりません。含める必要があるコードがあれば教えてください。コードに追加させていただきます。

ありがとうございました、


Visual Studio 2012バージョンのチュートリアルasp.net/mvc/tutorials/mvc-4/…に
RickAndMSFT

1
同じ問題があり、RenderSectionを@ {}から削除して@のみを使用すると、問題が解決しました。なぜこれが起こるのかわからない
ギル

1
上記のRickAndコメントのリンクが機能しません。しかし、より重要なのは、これはチュートリアルの問題ではなく、簡単に修正できるVSコード生成の問題であり、受け入れられたものの下の多くの回答が示唆するように、失敗した行を削除するだけで説明すべきではありません。実際に何が起こっているかについての議論については、少なくともいくつかのバージョンのVSについては、以下の私の回答(stackoverflow.com/a/27152625/165164)を参照してください。
アンガン

記述されたエラーは、ビューが@sectionレイアウトでレンダリングされない(を使用してRenderSection)を定義したときに生成されます これは、間違ったを参照したLayout場合や、レイアウトをまったく参照し忘れた場合に発生する可能性があります。@vonvの回答を
StuartLC

回答:


144

これは、マスターLayout.cshtmlでセクションを定義しましたが、ビューにはそのセクションの何も含めていません。

_Layout.cshtmlに次のようなものがある場合:

@RenderSection("scripts")

次に、そのレイアウトを使用するすべてのビューに、同じ名前のa を含める必要があります@section(セクションのコンテンツが空の場合でも)。

@{
    ViewBag.Title = "Title";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@section scripts{
    // Add something here
}

別の方法として、requiredをfalseに設定すると、すべてのビューにセクションを追加する必要がなくなります。

@RenderSection("scripts", required: false)

あるいはまた、あなたがラップすることができます@RenderSectionif、ブロック

@if (IsSectionDefined("scripts"))
{
    RenderSection("scripts");
}

7
あなたの答えは役に立ちました。私は_Layout.cshtml内で@RenderSection( "Scripts")を識別しませんでしたが、このチュートリアルのムービーコントローラを作成するときに自動的に作成されたビューで、@ section Scripts {@ Scripts.Render( " 〜/ bundles / jqueryval ")}だから、とりあえずそれらを削除して、今のところすべてが機能しています。
Kevin Dark

23
あなたの答えが良い間。私はあなたがそれを, required: false)作ることを追加すること@RenderSection("scripts", required: false)はそれが含まれるかどうかを許可することを指摘するべきだと思います。
Eonasdan 2012

3
@ KDark11ビューを作成するとき、VSはスクリプトを参照するかどうかを尋ねます。チェックを外すだけです。
Eonasdan 2012

1
@RenderSection("scripts", required: false)生成された_Layout.cshtmlに配置することが正しいソリューションであることに同意します。(その理由については、以下の説明を参照してください。)この方法で、すべてではなく1つのファイルに修正を追加できます-より多くのDRYer修正。
Anne Gunn

@Eonasdanすごいですね!彼らはいつその機能を追加しましたか?教えないでくださいv1.0:-/
Simon_Weaver


24

3つのレベルa'la _ MainLayout.cshtml <--- _ Middle.cshtml <--- Page.cshtmlのケースがありました。このようにしていても:

_MainLayout.cshtml

<head>
   @RenderSection("head", false)
</head>

_Middle.cshtml

@section head {
    @RenderSection("head")
}

そしてPage.cshtmlで定義

@section head {
   ***content***
}

それでもエラーが発生します

次のセクションは定義されていますが、レイアウトページ「〜/ Views / Shared / _Middle.cshtml」に対してレンダリングされていません:「head」。

判明し、エラーがためだったMiddle.cshtmlに頼る/Views/_ViewStart.cshtml それの親のレイアウトを解決します。この問題は、Middle.cshtmlで明示的に定義することで解決されました。

@{
Layout = "~/Views/_Shared/_MainLayout.cshtml";
}

これが仕様によるものなのか、MVC 4のバグなのかを判断できません-とにかく、問題は解決されました:)


同じ問題が発生しています。ポイントは、RenderBodyの前にRenderSectionを呼び出し、Body Content内でセクションを定義していることです。それは可能性が?
ギルヘルムフェレイラ2014年

今日、私はここのコードサンプルのおかげで「中間レイアウト」を行う方法を学びました。@section Foo {@RenderSection("Foo")}セクションを「伝える」ために!と一緒に体を渡さなければなりませんでした@RenderBody()
starlocke 2015年

11

提案された解決策が問題を解決せず、解決しない場合、承認された回答が承認された理由がわかりません。このトピックに関連する2つの関連する問題が実際に存在する可能性があります。

第1号

マスターページ(など_Layout.cshtml)にはセクションが定義されており、それは必須ですが、継承するビューはそれを実装していません。例えば、

レイアウトテンプレート

<body>
    @* Visible only to admin users *@
    <div id="option_box"> 
        @* this section is required due to the absence of the second parameter *@
        @RenderSection("OptionBox") 
    </div>
</body>

継承するビュー

コードを表示する必要はありません。ビューの実装がないことを@section OptionBox {}考慮してください。

問題#1のエラー

Section not defined: "OptionBox ".

第2号

マスターページ(例:)_Layout.cshtmlにはセクションが定義されており、それは必須であり、かつ継承するビューそれを実装していました。ただし、実装ビューには、そのマスターページ(のいずれか)で定義さていない追加のscriptセクションがあります。

レイアウトテンプレート

same as above

継承するビュー

<div>
  <p>Looks like the Lakers can still make it to the playoffs</p>
</div>
@section OptionBox {
<a href"">Go and reserve playoff tickets now</a>
}
@section StatsBox {
<ul>
    <li>1. San Antonio</li>
    <li>8. L. A. Lakers</li>
</ul>
}

問題#2のエラー

The following sections have been defined but have not been rendered for the layout page "~/Views/Shared/_Layout.cshtml": "StatsBox"

OPの問題は問題#2に似ており、受け入れられた回答は問題#1です。


3
OPのコメントは、エラーを解決するためにビューのセクションを削除したということです。つまり、ビューにはセクションが定義されていましたが、レイアウトには定義されていませんでした。それらが説明するエラー)他のすべての回答は、そのエラーを生成しない状況を説明していますが、代わりに「セクションは定義されていますが、レンダリングされていません」ではなく「セクションが定義されていません」。
AaronLS 2014年

8

私たちのソリューションは他の人とは十分に異なっていたと思うので、ここで文書化します。

メインレイアウト、中間レイアウト、最後のアクションページレンダリングのセットアップがあります。Main.cshtml <-Config.cshtml <-Action.cshtml

web.configでcustomErrors='On/RemoteOnly'カスタムエラーが発生し、例外もApplication_Error呼び出されなかった場合のみ。Layout = nullError.cshtml でオンラインでこれをキャッチできます。例外は、質問のように、不足しているスクリプトセクションでした。

Main.cshtmlで(required:falseを使用して)定義し、Action.cshtmlにはスクリプトセクションに書き込むものはありませんでした。

解決策は、@section scripts { @RenderSection("scripts", false) }Config.cshtml に追加することでした。


7

基本的には、_Layout.cshtmlに以下が含まれていない場合に発生します。

@RenderSection("scripts", required: false)

または

@RenderSection("scripts")  

なし

required: false

中:だから、ちょうど@RenderSection(偽「スクリプト」、必要な)を追加_Layout.cshtml 、それはで動作するこれらの開発者のために特別に働くKendouiプロジェクトをgenarated。


7

それを使用して新しいモデルを作成するときに、Visual Studioの一部のバージョンが自動生成するビューファイル間に不一致があるようです。新しいVS 2013 Community Editionを使用してこの問題に遭遇し、http: //www.w3schools.com/aspnet/mvc_app.aspのW3Schoolsチュートリアルをウォークスルーしましたが、上記のコメントは、チュートリアルの指示または問題には問題がないことを示していますVSの単一バージョン。

あなたがエラーメッセージを作ることができるというのは本当です離れて行くだけで除去することにより、

@Scripts.Render("~/bundles/jqueryval")

Visual Studioによって自動生成された作成/編集レイアウトの行。

しかし、その解決策は根本的な原因に対処しておらず、チュートリアルのウォークスルーを終了する以上のことを実行できる適切な場所にとどまっていません。実際のアプリケーションの開発のある時点(おそらくかなり早い段階)で、コメントアウトソリューションがアプリから削除するjquery検証コードへのアクセスが必要になります。

VSを使用して新しいモデルを作成する場合、作成、削除、詳細、編集、インデックス作成の5つのビューファイルのセットも作成されます。これらのビューの2つであるCreateとEditは、モデルの基礎となるデータベースレコードのフィールドのデータをユーザーが追加/編集できるようにすることを目的としています。実際のアプリでのこれらのビューの場合、データベースにレコードを保存する前に、jquery検証ライブラリーを使用してある程度のデータ検証を実行することをお勧めします。そのため、VSは次の行を追加します

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

他の2つのビューではなく、これら2つのビューの下部に。自動生成されたコードは、これらのビューで利用できる検証ライブラリを作成しようとしていますが、他のビューでは利用できません。

このエラーが発生するのは、VSが対応する行を共有_Layout.cshtmlファイルに追加しないか、上記の1つの回答を参照して追加しますが、コメント化したままにします。この行は

@RenderSection("scripts", required: false)

ビューの一部にスクリプトセクションがある場合([作成]および[編集]と同様)、レイアウトに埋め込まれたRenderSectionコマンドが必要です。一部のスクリプトにセクションがあり、一部にない場合(削除、詳細、およびインデックスにはない)、RenderSectionコマンドにはrequired: falseパラメーターが必要です。

したがって、チュートリアルのウォークスルーを終了するだけではない場合の最善の解決策は、ステートメントを_Layout.cshtmlに追加して、編集ビューと作成ビューからコードを削除しないことです。

PSここでは、必要なものが「バンドル」にあり、requireステートメントがプロジェクトに存在しないbundlesフォルダーにファイルを含めようとしているように見えるので、少し混乱しています。ただし、デバッグビルドとチュートリアルでは、バンドルされたファイルが一度に1つずつ含まれるため、これは関係ありません。参照:http : //www.asp.net/mvc/overview/performance/bundling-and-minificationここで問題となっているコードは、ページの下の3分の2について簡単に説明されています。


これは「揺れる」ものであり、本当に良い説明です。多分それは後で来たので、多くの票を獲得しませんでした...
ジョセフドッグ

2

Visual Studio 2012でASP.NET MVC 4チュートリアルを実行しているときに、「コントローラーセクションからのモデルのデータへのアクセス」で同じエラーが発生しました。修正は非常に簡単です。

共有フォルダーの_Layout.cshtmlドキュメント内にVisual Studio 2012で新しいASP.NET MVC 4 Webアプリケーションを作成すると、「スクリプト」セクションがコメント化されます。

    @*@RenderSection("scripts", required: false)*@

行のコメントを外すだけで、サンプルコードが機能するはずです。

    @RenderSection("scripts", required: false)

1

MVCの初心者向けのチュートリアルを実装するときに、同じ問題があります。layout.cshtmlファイルの@RenderSectionを変更するためのさまざまな提案を受けましたが、使用していません。

何度も検索したところ、(View / Edit.cshtml)で生成されたスクリプトタグと他のcshtmlファイルがレンダリングされないことがわかりました

**@section Scripts {
@Scripts.Render("~/bundles/jqueryval")

} **

そのため、これらの行を削除すると、アプリケーションがスムーズに実行を開始します。



0

ウェブでエラーを検索し、このページにアクセスしました。私はVisual Studio 2015を使用していますが、これは私の最初のMVCプロジェクトです。

レンダリングセクションの前に@記号がないと、同じエラーが発生します。これを将来の初心者のために共有したいと思います。

 @RenderSection("headscripts", required: false)

0

@sectionを含む部分ビューを参照している_Layoutファイルの@section内からセクションをレンダリングしているように感じます。つまり、@ section内に@sectionをネストしています。_Layoutファイルで、rendersectionの周りの@sectionを削除します。



0

私にとっての問題は、_Layout.cshtmlにありました。条件内にRenderSectionがあります。

 @if (theme == "Red" || theme == "Green")
  {
       <div>
       @RenderSection("Footer", false)
       </div>
   }

そして私の子供の見解ではそれは無条件でした

@section Footer{
        <div>
            @Html.AwButton("Reject", "Reject")
            @Html.AwSubmit("Ok", "Ok")
        </div>
    }

テーマに関係なく、子供はフッターを追加していました。しかし、親でテーマが赤または緑でない場合、フッターが追加されず、ハンドされない例外がスローされていました。


-1

用語「」のスペルと大文字小文字を確認してください

@RenderSection( "name"、required:false)と書くときは必ず、かみそりビューにセクション@section name {}が含まれていることを確認してください。


-1

ビューでスクリプトセクションを使用して正しいスペルを入力したことを確認してください

正しいです

@section scripts{ //your script here}

入力した場合、@section script{ //your script here}これは誤りです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.