Frage Verwenden Sie ASP.NET MVC als E-Mail-Vorlagen-Engine: Gute Idee?


Wäre es eine gute Idee und eine ausführbare Datei, die ASP.NET MVC View Engine zu verwenden, um HTML per E-Mail zu versenden?

Ich weiß, dass es möglich ist, die Ansicht in eine Zeichenfolge rendern zu lassen. So könnte das zum Erstellen der E-Mail-Nachricht verwendet werden. Da ASP.NET MVC bereits in der Anwendung verwendet wird, kann ich alle praktischen ASP.NET MVC-Dateien verwenden, ohne Brail oder NVelocity für meine "Mail-Ansichten" verwenden zu müssen.

Gute Idee? Irgendwelche Vorbehalte? Beispiele :)?


5
2017-09-08 07:41


Ursprung


Antworten:


Ja, es ist eine gute Idee und relativ einfach zu implementieren.


4
2017-09-08 07:45



Ich persönlich finde es eine gute Idee. Definitiv besser als ein Stück Markup mit Platzhaltern in die Datenbank zu setzen.

Der Nachteil ist, dass Sie Visual Studio zum Bearbeiten dieser Vorlagen benötigen und das Projekt neu kompilieren und erneut bereitstellen müssen. Sie könnten die Arbeit mit Vorlagen nicht an andere nichttechnische Mitarbeiter "outsourcen".

Und ja, das Hinzufügen neuer Vorlagen erfordert auch Ihre persönliche Intervention.


1
2017-09-08 07:45



Hier ist meine Version des RenderPartialToString als Erweiterungsmethode (die sich auch um Pfade etc. kümmert):

public static class ExtensionMethods
{
    public static string RenderPartialToString(this ControllerBase controller, string partialName, object model)
    {
        var vd = new ViewDataDictionary(controller.ViewData);
        var vp = new ViewPage
        {
            ViewData = vd,
            ViewContext = new ViewContext(),
            Url = new UrlHelper(controller.ControllerContext.RequestContext)
        };

        ViewEngineResult result = ViewEngines
                                  .Engines
                                  .FindPartialView(controller.ControllerContext, partialName);

        if (result.View == null)
        {
            throw new InvalidOperationException(
            string.Format("The partial view '{0}' could not be found", partialName));
        }
        var partialPath = ((WebFormView)result.View).ViewPath;

        vp.ViewData.Model = model;

        Control control = vp.LoadControl(partialPath);
        vp.Controls.Add(control);

        var sb = new StringBuilder();

        using (var sw = new StringWriter(sb))
        {
            using (var tw = new HtmlTextWriter(sw))
            {
                vp.RenderControl(tw);
            }
        }
        return sb.ToString();
    }
}

Verwendung:

return this.RenderPartialToString("YourPartialView", yourModel);

hoffe das hilft..

Jim


1
2017-09-08 08:33



Sie können MVCMailer NuGet verwenden - es verwendet die MVC-Ansichtsvorlagen und Sie schreiben nur eine einzige Codezeile, um dies zu tun!


0
2018-01-12 23:30