Gibt es eine Möglichkeit, eine MVC-Ansicht (aspx-Datei) von einer Nicht-Web-Anwendung zu verarbeiten?

8

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?

    
marq 13.09.2010, 16:44
quelle

5 Antworten

7

Beendete meine eigene Frage:)

%Vor%

Dann, um eine Datei zu rendern:

%Vor%     
marq 22.09.2010, 02:25
quelle
11

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:

  • URL in neuen HttpRequest spielt keine Rolle, aber muss eine gültige URL
  • sein
  • es ist nicht dazu gedacht, von einer asp.net App verwendet zu werden, die bereits einen Kontext hat / der besagt, dass ich nicht sicher bin, ob es tatsächlich die neue AppDomain erzeugen und funktionieren würde
  • Der Konstruktor und die spezifische Instanz des Controllertyps sind im Code explizit, könnten durch etwas ersetzt werden, das in den Parametern übergeben werden soll, müssen sich aber mit den Einschränkungen von MarshalByRef befassen / schlimmstenfalls könnte eine einfache Reflektion dafür verwendet werden
eglasius 13.09.2010 17:13
quelle
0

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 .

    
Wyatt Barnett 13.09.2010 17:27
quelle
0

Wir haben den Cassini-Webserver für unsere Webanwendung verwendet, während er offline war. Kann dieser Ansatz auch für Sie funktionieren? Schauen Sie hier Cassini

    
alexber 13.09.2010 17:23
quelle
0

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.

    
marq 17.09.2010 15:04
quelle

Tags und Links