Ich habe einen Hintergrunddienst, der E-Mails an Benutzer meiner Website sendet. Ich möchte die E-Mail-Vorlagen als MVC-Ansichten schreiben, um die Dinge konsistent zu halten (so dass dasselbe Modell verwendet werden kann, um eine E-Mail zu senden, um eine Webseite anzuzeigen).
Leider, wenn ich versuche, eine LoadControl zu machen (die einfach zu BuildManager.CreateInstanceFromVirtualPath patcht), bekomme ich Folgendes:
%Vor%Es scheint, dass wenn ich MvcBuildViews auf "true" setzen sollte, dass es eine einfache Möglichkeit geben sollte, die kompilierten Ansichten zu verwenden, um eine E-Mail-Vorlage zu erstellen, aber ich kann nicht herausfinden, wie.
Ich habe den folgenden Blog von Rick Strahl gefunden, der den Trick machen könnte: Ссылка
Es scheint jedoch, einen ganzen ASP.NET-Server zum Verarbeiten von Anfragen zu starten.
Gibt es eine einfache Möglichkeit, eine MVC-Ansicht & amp; rendern? Oder ist die einzige Möglichkeit, die ASP.NET-Laufzeit zu laden, wie von Rick Strahl vorgeschlagen?
Die standardmäßige asp.net-View-Engine ist an die asp.net-Engine gebunden. Es ist mit dem Kontext verbunden, ich denke, Sie können es umgehen, aber es ist definitiv nicht einfach .
Das Problem tritt mit der Kombination der Standard-View-Engine und der ASP.net-Engine auf, andere View-Engines sollten dieses Problem nicht haben. Zumindest der Spark-View-Motor nicht.
Bearbeiten: OP gelöst mit den letzten Hinweisen, aber fwiw meine Version, die die Controller-Home-Index-Aktion der Standard-asp.net mvc-Projektvorlage verwendet:
%Vor%... aus einem separaten Projekt:
%Vor%Einige zusätzliche Anmerkungen:
In einem Wort, nein - ASP.NET View Rendering ist mit dem Web-Antwort-Zyklus verbunden. Wahrscheinlich war es ziemlich notwendig, um eine vernünftige Leistung in den alten Tagen zu bekommen.
Nun gibt es noch einige andere Optionen, einschließlich der neuen Rasierer-Ansichts-Engine von Microsoft oder der Open-Source Spark View Engine .
Dies war mein erster Versuch, und es ist fehlgeschlagen. Siehe oben für die richtige und funktionierende Antwort
Das ist so nah wie möglich, aber es hat immer noch nicht funktioniert. Nun beschwert es sich, dass get_Server eine NullreferenceException verursacht.
Ich dachte nur, ich würde hier posten, was ich getan habe und wie weit ich gekommen bin, falls jemand die Forschung fortsetzen möchte.
Ich habe meine csproj-Datei modifiziert, um eine Assembly mit den vorkompilierten ASPX-Dateien zu erzeugen:
%Vor%Dies hat eine "MyProject_CompiledAspx.dll" erstellt, auf die ich dann in meiner Anwendung verwiesen habe. Dies verursachte jedoch eine neue NullReferenceException.
Es ist schade, dass ASPX-Dateien, die so leistungsstark sind wie sie sind, so eng in den ASP.NET-Server integriert sind.
Tags und Links asp.net-mvc c# templates