使用ASP.NET MVC视图引擎来呈现通过电子邮件发送的html会是一个好主意和可执行文件吗?使用ASP.NET MVC作为电子邮件模板引擎:好主意?
我知道可以让视图渲染成一个字符串。这可以用来构建邮件消息。 由于ASP.NET MVC已经在应用程序中使用,所以我可以使用所有实用的ASP.NET MVC,而不必为我的“邮件视图”使用Brail或NVelocity。
好主意?任何警告?例子 :) ?
使用ASP.NET MVC视图引擎来呈现通过电子邮件发送的html会是一个好主意和可执行文件吗?使用ASP.NET MVC作为电子邮件模板引擎:好主意?
我知道可以让视图渲染成一个字符串。这可以用来构建邮件消息。 由于ASP.NET MVC已经在应用程序中使用,所以我可以使用所有实用的ASP.NET MVC,而不必为我的“邮件视图”使用Brail或NVelocity。
好主意?任何警告?例子 :) ?
是的,这是一个好主意,relatively easy to implement。
我个人认为这是个好主意。绝对比将占位符的一段标记放入数据库更好。
缺点是您需要Visual Studio编辑这些模板,然后重新编译并重新部署项目。您无法将模板工作“外包”给其他非技术人员。
是的,添加新模板也需要您的个人干预。
重新编译确实是最大的警告。这也是为什么,我们正在放弃这种方法并开始寻找XSLT ...... – Bertvan 2010-09-09 20:47:42
在这里,我的版本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
您可以使用MVCMailer NuGet - 它使用MVC视图模板,您只需编写一个单行代码来做到这一点!
是的,伟大的工程 - 你会想看看这个:http://razorengine.codeplex.com/ – 2011-02-13 21:21:30