2010-09-08 6 views
5

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

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

Хорошая идея? Какие-либо оговорки? Примеры :) ?

+1

Да, отлично работает - вам нужно взглянуть на это: http://razorengine.codeplex.com/ –

ответ

4

Да, это хорошая идея и relatively easy to implement.

+0

Спасибо, а как насчет поведения async? Я не хочу, чтобы синтаксический анализ и отправка электронной почты блокировали запросы страницы. – Bertvan

+0

В этом случае вы можете выполнить это в новом потоке или с помощью AsyncController. –

+0

Хорошо, давайте посмотрим, будет ли это работать :) – Bertvan

1

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

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

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

+0

Перекомпиляция - действительно самое большое предостережение. Именно поэтому мы отступаем от этого подхода и начинаем смотреть на XSLT ... – Bertvan

1

Вот, с моей версии 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); 

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

jim

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^