使用 ASP.NET MVC 视图引擎呈现要通过电子邮件发送的 html 是否是一个好主意和可执行文件?
我知道可以让视图呈现为字符串。所以这可以用来构建邮件消息。由于 ASP.NET MVC 已经在应用程序中使用,我可以使用所有实用的 ASP.NET MVC 东西,而不必为我的“邮件视图”使用 Brail 或 NVelocity。
好主意?有什么注意事项吗?例子 :) ?
使用 ASP.NET MVC 视图引擎呈现要通过电子邮件发送的 html 是否是一个好主意和可执行文件?
我知道可以让视图呈现为字符串。所以这可以用来构建邮件消息。由于 ASP.NET MVC 已经在应用程序中使用,我可以使用所有实用的 ASP.NET MVC 东西,而不必为我的“邮件视图”使用 Brail 或 NVelocity。
好主意?有什么注意事项吗?例子 :) ?
是的,这是一个好主意,而且相对容易实施。
我个人认为这是个好主意。绝对比将带有占位符的标记放入数据库中更好。
缺点是您将需要 Visual Studio 来编辑这些模板,然后重新编译和重新部署项目。您将无法将使用模板的工作“外包”给其他非技术人员。
是的,添加新模板也需要您的个人干预。
在这里,我的 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);
希望这可以帮助..
吉姆
您可以使用 MVCMailer NuGet - 它使用 MVC 视图模板,您只需编写一行代码即可!