Wenn man mit der WebForms-ViewEngine arbeitet, ist die Sache relativ klar: ganze Seiten bekommen eine .aspx-View, Teile, also so genannte "Partials", bekommen eine .ascx-View. Der Unterschied, der auch historisch bedingt aus der WebForms-Ecke kommt: einem .ascx kann man keine Masterpage zuweisen, es enthält immer nur Teile einer fertigen HTML-Datei. Damit war die Sache hier erledigt.
Etwas anders sieht es nun mit der Razor-Engine aus, die mit MVC 3 eingeführt wird. Hier erfolgt keine Trennung mehr in unterschiedliche Dateitypen, man kann sich allein - und freiwillig - an die von Microsoft eingeführte Konvention halten, Partial-Views mit einem Unterstrich im Dateinamen zu beginnen, also "_xyz.cshtml".
Das Problem: wie alle anderen Views verwendet auch diese nun das global definierte Layout-File. Wenn man den Spaß nun also mittels @Html.Action() einbindet, hat man sein Layout gleich zweimal ineinander geschachtelt vor sich :-).
Nun kann man zwar in die View gehen und das Layout-File mittels
1: @{
2: Layout = "";
3: }
zurücksetzen. Die elegantere Methode ist es aber in meinen Augen vom Controller an Stelle eines View-Objektes ein PartialView-Objekt zurückgeben zu lassen, bei dessen Verwendung _ViewStart.cshtml nicht beachtet wird:
1: return PartialView("_FilesFilter", model);
Meine aktuellen Namenskonventionen übrigens:
- View.cshtml => normale Views/Seiten
- _View.cshtml => Partial Views
- View.layout.cshtml => Layout-Dateie (ehemals Masterpage)