5

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

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

好主意?有什么注意事项吗?例子 :) ?

4

4 回答 4

4

是的,这是一个好主意,而且相对容易实施

于 2010-09-08T07:45:13.347 回答
1

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

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

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

于 2010-09-08T07:45:24.070 回答
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);

希望这可以帮助..

吉姆

于 2010-09-08T08:33:19.110 回答
0

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

于 2011-01-12T23:30:58.507 回答