I would like to have 2 separate Layouts in my application. Let say one is for the Public section of the website and the other is for the Member side.

For simplicity lets say all the logic for each of theses sites is wrapped neatly into 2 distinct controllers.

  • PublicController
  • StaffController

And that they each have a corresponding Layout for all the View under each.

  • _PublicLayout.cshtml
  • _StaffLayout.cshtml

How do I use the _ViewStart.cshtml file to specify that all View’s / Action under “Public” use the PublicLayout and everything under “Staff” use the StaffLayout?

Solution:

You could put a _ViewStart.cshtml file inside the /Views/Public folder which would override the default one in the /Views folder and specify the desired layout:

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

By analogy you could put another _ViewStart.cshtml file inside the /Views/Staff folder with:

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

You could also specify which layout should be used when returning a view inside a controller action but that’s per action:

return View("Index", "~/Views/Shared/_StaffLayout.cshtml", someViewModel); 

Yet another possibility is a custom action filter which would override the layout. As you can see many possibilities to achieve this. Up to you to choose which one fits best in your scenario.

Advertisements