Kenci
Kenci

Reputation: 4882

Why is my View not including _Layout.cshtml?

I recently made some changes to my MVC 3 project.

When I run it, the Views dont include any files like Site.css. When I debug my Index() ActionController, it jumps directly to the View, withouting including files like _Layout.cshtml. So i just get a View with a white background, no menus etc.

The Global.asax.cs file contains following code:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );

    routes.MapRoute(
        "Default2", // Route name
        "{controller}/{action}/{id}/{page}", // URL with parameters
        new { controller = "Survey", action = "DisplayQuestions", id = "", page = "" }
    );
}

Upvotes: 22

Views: 29525

Answers (4)

Computer
Computer

Reputation: 2227

I know this has been resolved but for me (MVC 5) I had to add this line of code before the regular view displayed its content

public ActionResult Index()
{
    return View();
}

Upvotes: -3

Alex Duggleby
Alex Duggleby

Reputation: 8038

If the breakpoint in your controller action is being hit the routes may be wrong but that's not a reason for _Layout.cshtml to not load.

A few things to check:

  • Is your view using View() and not PartialView() (the latter ignores ViewStart.cshtml and so the _Layout.cshtml).
  • Did you move your _Layout.cshtml recently / Have you renamed Shared (or created a SharedController by accident)?
  • Does your view include something like this at the top which would deactivate the _Layout.cshtml?

    @{
        Layout = "";
    }
    
  • Does your _ViewStart.cshtml still exist with the following code which activates the _Layout.cshtml?

    @{
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    

Upvotes: 57

Jamie Dixon
Jamie Dixon

Reputation: 53991

It sounds like you've got rid of the layout property in your index view.

@{
Layout = "~/Views/Shared/_Layout.cshtml"
}

Upvotes: 1

jsmith
jsmith

Reputation: 976

Move your "Default2" route up above your "Default" route.

the Default route is more generic so Default2 should be first

also, inside your views make sure that you're specifying the layout to use

@{
    Layout = "yourlayoutpage.cshtml"
}

Upvotes: 2

Related Questions