Correct way to use _viewstart.cshtml and partial Razor views?
asp.net-mvc-3, razor
Solution
If you `return PartialView()` from your controllers (instead of `return View()`), then `_viewstart.cshtml` will not be executed.
Problem
I'm using _viewstart.cshtml to automagically assign the same Razor Layout to my views. It's a dead simple file in the root of my Views folder that looks like this: ``` @{ Layout = "~/Views/Shared/_Layout.cshtml"; } ``` This is more DRY than adding the @Layout directive to every single view. However, this poses a problem for Razor partial views, because they run the contents of _viewstart.cshtml and therefore incorrectly assign themselves a layout, which makes them, um, no longer partial. Here's a hypothetical project, showing the _viewstart.cshtml file, the shared _layout.shtml file, and a partial view ("AnonBar.cshtml"). Currently, the way that I'm getting around this is by adding the following line to every partial view: ``` @{ Layout = ""; } ``` This seems like the wrong way to denote a view as a partial in Razor. (Note that unlike the web forms view engine, the file extension is the same for partial views.) Other options I considered but that are even worse: - Putting all partial views into a common folder, so they could share a common _viewstart.cshtml. This breaks the convention of views being in the same folder as their controller. - Not using partial views. Is this something that is still being fleshed out by the Razor view engine team, or am I missing a fundamental concept?