使用ASP.NET MVC作为电子邮件模板引擎:好主意?

时间:2010-09-08 07:41:49

标签: asp.net-mvc templates email viewengine

使用ASP.NET MVC视图引擎呈现通过电子邮件发送的HTML是不是一个好主意和可执行文件?

我知道可以让视图呈现为字符串。这可以用来构建邮件消息。 由于ASP.NET MVC已经在应用程序中使用,因此我可以使用所有实用的ASP.NET MVC,而无需使用Brail或NVelocity作为我的“邮件视图”。

好主意?有什么警告吗?示例:)?

4 个答案:

答案 0 :(得分:4)

是的,这是一个好主意,relatively easy to implement

答案 1 :(得分:1)

我个人认为这是一个好主意。绝对比将带有占位符的标记放入数据库更好。

缺点是您需要Visual Studio编辑这些模板,然后重新编译和重新部署项目。您无法将模板“外包”给其他非技术人员。

是的,添加新模板也需要您的个人干预。

答案 2 :(得分:1)

这里,我的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);

希望这会有所帮助..

吉姆

答案 3 :(得分:0)

您可以使用MVCMailer NuGet - 它使用MVC视图模板,您只需编写一行代码即可!