Thomas Bandt

Über mich | Kontakt | Archiv

ASP.NET MVC 3 - Verwendung des Layout-Files für @Html.Action() verhindern

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:

Kommentare

  1. Thomas schrieb am Montag, 20. Dezember 2010 21:14:00 Uhr:

    Nachtrag:

    Man sollte hier unbedingt bei Partial Views aufpassen, die in Layoutfiles verwendet werden, d.h. dort über @Html.Partial() eingebunden sind.

    Nimmt man bei denen nicht das Layout-File raus (durch:

    @{
    Layout = ""
    }

    ) kommt es zu einem rekursiven Aufruf: das Layoutfile, bindet die Partial View ein, welche wiederum das Layoutfile benutzt, welche wiederum ... usw.

    Mit WebForms-UserControls kann das nicht passieren, hier durchaus ... da werden viele Anfänger drüber stolpern.


« Zurück  |  Weiter »