Использовать ASP.NET MVC в качестве механизма шаблонов электронной почты: хорошая идея? - PullRequest
5 голосов
/ 08 сентября 2010

Было бы неплохо и выполнимо использовать ASP.NET MVC View Engine для рендеринга html для отправки по электронной почте?

Я знаю, что можно сделать так, чтобы представление отображалось в строку,Так что это может быть использовано для создания почтового сообщения.Поскольку ASP.NET MVC уже используется в приложении, я могу использовать все практические вещи ASP.NET MVC без необходимости использовать Brail или NVelocity для моих «просмотров почты».

Хорошая идея?Любые предостережения?Примеры :)?

Ответы [ 4 ]

4 голосов
/ 08 сентября 2010

Да, это хорошая идея, и относительно легко реализовать .

1 голос
/ 08 сентября 2010

Вот моя версия RenderPartialToString как метод расширения (который также заботится о путях и т. Д.):

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();
    }
}

использование:

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

надеюсь, это поможет ..

джим

1 голос
/ 08 сентября 2010

Лично я считаю, что это хорошая идея.Определенно лучше, чем помещать часть разметки с заполнителями в базу данных.

Недостатком является то, что вам потребуется Visual Studio для редактирования этих шаблонов, а затем перекомпиляции и повторного развертывания проекта.Вы не сможете "передать" работу с шаблонами другому нетехническому персоналу.

И да, добавление новых шаблонов также потребует вашего личного вмешательства.

0 голосов
/ 13 января 2011

Вы можете использовать MVCMailer NuGet - он использует шаблоны представлений MVC, и вы просто пишете одну строку кода, чтобы сделать это!

...