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

It means that you have defined a section in your master Layout.cshtml, but you have not included anything for that section in your View.

If your _Layout.cshtml has something like this:

@RenderSection("scripts")

Then all Views that use that Layout must include a @section with the same name (even if the contents of the section are empty):

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

As an alternative, you can set required to false, then you won't be required to add the section in every View,

@RenderSection("scripts", required: false)

or also you can wrap the @RenderSection in an if block,

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

I had a case with 3 levels a'la _MainLayout.cshtml <--- _Middle.cshtml <--- Page.cshtml. Even though doing like this:

_MainLayout.cshtml

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

_Middle.cshtml

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

and in Page.cshtml defining

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

I would still get the error

The following sections have been defined but have not been rendered for the layout page “~/Views/Shared/_Middle.cshtml”: "head".

Turned out, the error was for the Middle.cshtml to rely on /Views/_ViewStart.cshtml to resolve it's parent layout. The problem was resolved by defining this in Middle.cshtml explicitly:

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

Can't decide whether this would be by-design or a bug in MVC 4 - anyhow, problem was solved :)


Also, you can add the following line to the _Layout.cshtml or _Layout.Mobile.cshtml:

@RenderSection("scripts", required: false)