如何使用RazorEngine从模板发送电子邮件

时间:2016-06-08 15:38:32

标签: asp.net-mvc razor html-email razorengine

我正在尝试使用.cshtml模板向RazorEngine发送电子邮件。 their site上的文档显示了如何将其与包含剃刀语法的字符串一起使用。如何通过加载.cshtml文件来继续使用它?

这就是我所拥有的

    string templatePath = "~/Templates/InitialApplicationBody.cshtml";
    var result = Engine.Razor.RunCompile(templatePath, "templateKey", null, viewModel);

2 个答案:

答案 0 :(得分:3)

从MVC控制器中,很容易从Razor视图(CSHTML文件)生成HTML。

我已经成功使用了Render a view as a string的已接受答案中的代码,并将其放在基本控制器中。

// Renders a Razor view, returning the HTML as a string
protected string RenderRazorViewToString<T>(string viewName, T model) where T : class
{
    ViewData.Model = model;

    using (var sw = new StringWriter())
    {
      var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext,
                                                           viewName);

      var viewContext = new ViewContext(ControllerContext, viewResult.View,
                                        ViewData, TempData, sw);

      viewResult.View.Render(viewContext, sw);
      viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);

      return sw.GetStringBuilder().ToString();
   }
}

答案 1 :(得分:2)

Mailzory项目是发送具有Razor模板的电子邮件的便捷选择。 Mailzory在幕后使用了RazorEngine。

select n.ID, n.FirstName, n.LastName, c.FirstNameCount
from Names n
left outer join
(
    select FirstName, count(*) as FirstNameCount
    from Names
    group by FirstName
) c
on n.FirstName = c.FirstName

这个项目在Github举办。还有一个nuget package可用于Mailzory。