我正在尝试使用.cshtml
模板通过RazorEngine发送电子邮件。他们网站上的文档展示了如何将其与包含 razor 语法的字符串一起使用。我将如何通过加载.cshtml
文件来使用它?
这就是我所拥有的
string templatePath = "~/Templates/InitialApplicationBody.cshtml";
var result = Engine.Razor.RunCompile(templatePath, "templateKey", null, viewModel);
从 MVC 控制器,很容易从 Razor 视图(CSHTML 文件)生成 HTML。
我已经成功地使用接受答案中的代码将视图呈现为字符串,并将其放入基本控制器中。
// 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();
}
}
Mailzory项目是发送具有Razor模板的电子邮件的便捷选择。Mailzory在幕后使用RazorEngine。
// template path
var viewPath = Path.Combine("Views/Emails", "hello.cshtml");
// read the content of template and pass it to the Email constructor
var template = File.ReadAllText(viewPath);
var email = new Email(template);
// set ViewBag properties
email.ViewBag.Name = "Johnny";
email.ViewBag.Content = "Mailzory Is Funny";
// send email
var task = email.SendAsync("mailzory@outlook.com", "subject");
task.Wait()
该项目托管在Github。还有一个可用于Mailzory的nuget包。