ASP.NET MVC-Renderansicht auf eine Zeichenfolge zum E-Mail-Versand

Translate

Ich möchte MVC-Ansichten verwenden, um den Text für eine E-Mail zu erstellen, und bin darauf gestoßen (http://www.brightmix.com/blog/renderpartial-to-string-in-asp-net-mvc/), aber es scheint nicht mit stark typisierten Ansichten zu funktionieren (ViewContext ist null). Aber ich war nach etwas, das eine vollständige Ansicht einschließlich einer Masterseite rendern würde.

Ich dachte, wenn es eine Möglichkeit gäbe, einfach eine Ansicht aufzurufen, ohne sie umzuleiten und in einen anderen Stream zu schreiben und die E-Mail innerhalb des Controllers zu senden, könnte dies funktionieren, aber ich kann nicht herausfinden, wie eine Ansicht aufgerufen wird.

Irgendwelche Vorschläge wären toll!

Danke im Voraus.

Gifster

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Die Frage wurde bereits gestellt (und beantwortet):

Ansicht als Zeichenfolge rendern

Dies ist das Bit, das ich benutze:

protected string RenderViewToString<T>(string viewPath, T model, System.Web.Mvc.ControllerContext controllerContext) {
        using (var writer = new StringWriter()) {
            var view = new WebFormView(viewPath);
            var vdd = new ViewDataDictionary<T>(model);
            var viewCxt = new ViewContext(controllerContext, view, vdd, new TempDataDictionary(), writer);
            viewCxt.View.Render(viewCxt, writer);
            return writer.ToString();
        }
    }

Der beste Ort für diese Methode ist ein Klassenbibliotheksprojekt, auf das Ihr MVC-Projekt verweist. Hauptsächlich, weil Sie es auf diese Weise problemlos in all Ihren Apps wiederverwenden können. Aber auch, weil es weder Anwendungslogik ist (also nicht in die Steuerung gehört) noch in das Modell gehört. Einige Dinge sind nur Dienstprogramme.

Beachten Sie, dass der viewPath-Parameter der PHYSICAL PATH für die Datei mit der Erweiterung .aspx sein muss, damit dies funktioniert. Sie können eine Route nicht verwenden, da für die WebFormView-Klasse ein physischer Pfad in ihrem Konstruktor erforderlich ist.

Dadurch wird die vollständige Ansicht gerendert und die Masterseite berücksichtigt.


GESUNDHEITSWARNUNG FÜR HTML-E-MAILS:

HTML-E-Mails und die Geräte, auf denen Sie sie lesen, sind noch schwieriger und restriktiver zu gestalten als Websites und Browser. Was in einem funktioniert, funktioniert in einem anderen nicht. Bei HTML-E-Mails muss man es also wirklich einfach halten! Ihre schöne Seite mit Menüs und relativen Bildern und was auch immer, funktioniert nicht in allen E-Mail-Geräten. Nur als Beispiel muss das Attribut images src absolut sein und die Domäne enthalten:

Das wird nicht funktionieren:

<img src="/Images/MyImage.gif" ... /> 

Bit das wird:

 <img src="http://www.mywebsite.com/Images/MyImage.gif" ... /> 

Mit diesen Einschränkungen funktioniert es gut und ich benutze es. Versuchen Sie einfach nicht, ihnen die vollständige Spielerei Ihrer Website zu senden, denn das wird nicht funktionieren!

Noch wichtiger:

Alle CSS müssen INLINE sein und nur für das grundlegende Styling: Farben, Ränder, Polsterung. Aber kein Schweben und Positionieren. CSS-Layouts funktionieren auf allen Geräten nicht einheitlich!

Quelle
Translate

Sie können dazu das MvcView NuGet-Paket verwenden! Es ist einfach, installieren Sie es einfach mit dem Installationspaket MvcMailer und Sie sind fertig! Verwenden Sie die volle Leistung der View Engine, um Vorlagen, Masterseiten, Modelle anzuzeigen und HTML-E-Mails ordentlich zu senden!

Quelle
Über den Autor