Thomas Bandt

Über mich | Kontakt | Archiv

ASP.NET MVC 2 Areas und Html.RenderAction()

Obwohl vor zwei Jahren anfänglich vermisst, hat sich seitdem kaum die Gelegenheit ergeben, Areas in einem Webprojekt mit ASP.NET MVC einzusetzen. Nun bin ich gerade dabei sie aber doch zum ersten Mal einzuziehen und lief sofort in einen blöden Fehler.

Meine ControllerFactory (für den IoC-Container) krachte, weil controllerType plötzlich null war. Nach einer Weile planloser Suche nach der Nadel im Heuhaufen schmiss ich dann zum Glück doch noch den Debugger an und sah, dass es sich nicht um den neu in die Area verschobenen Controller handelte, sondern um einen von mir "SharedController" genannten Kollegen.

Die Ursache versteckte sich also in der verwendeten Masterpage:

   1:  <% Html.RenderAction("LoginStatus", "Shared"); %>

RenderAction und andere Methoden gehen grundsätzlich erst einmal nicht aus der Area, in deren Kontext sie laufen, "heraus". Das heißt dass der Controller Shared innerhalb der Area gesucht - und in meinem Fall nicht gefunden wird.

Da der Loginstatus für alle Areas relevant ist und ich ihn nicht doppelt anlegen möchte, muss der Methode also mitgeteilt werden, dass Controller und Action außerhalb der aktuellen Area zu suchen sind. Das funktioniert auch:

   1:  <% Html.RenderAction("LoginStatus", "Shared", new { area = ""}); %>

Simpel, aber da muss man erstmal drauf kommen.



« Zurück  |  Weiter »