将电子邮件模板提取到部分视图中(以便您可以重复使用它),然后
您可以在控制器操作中将部分视图呈现为字符串,以便将其用作电子邮件正文:
这个取自Render a view as a string的方法可以让你将部分视图渲染成一个字符串:
public string RenderRazorViewToString(string viewName, object model)
{
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();
}
}
在应该发送电子邮件的控制器操作中,您可以执行以下操作:
public ActionResult SendEmail(SomeModel model)
{
//generate a model for an email:
var emailModel = ....;
//assuming that _EmailTemplate.cshtml is a partial view that contains the email template
var emailBody = this.RenderRazorViewToString("_EmailTemplate",emailModel);
//send the email here...
}