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?
Thanks!
One more method is to Define the Layout inside the View:
More Ways to do, can be found here, hope this helps someone.
This method is the simplest way for beginners to control Layouts rendering in your ASP.NET MVC application. We can identify the controller and render the Layouts as par controller, to do this we can write our code in _ViewStart file in the root directory of the Views folder. Following is an example shows how it can be done.
Read Complete Article here "How to Render different Layout in ASP.NET MVC"
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:By analogy you could put another
_ViewStart.cshtml
file inside the/Views/Staff
folder with:You could also specify which layout should be used when returning a view inside a controller action but that's per action:
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.
UPDATE:
As requested in the comments section here's an example of an action filter which would choose a master page:
and then decorate a controller or an action with this custom attribute specifying the layout you want: