ASP.NET MVC 将视图渲染为用于电子邮件发送的字符串

2023-12-24

我想使用 MVC 视图创建电子邮件正文,我遇到过这个(http://www.brightmix.com/blog/renderpartial-to-string-in-asp-net-mvc/ http://www.brightmix.com/blog/renderpartial-to-string-in-asp-net-mvc/)但它似乎不适用于强类型视图(ViewContext 为 null)。但我想要的是能够呈现包括母版页在内的完整视图的东西。

我认为,如果有一种方法只需调用视图而不进行重定向,只需写入不同的流并在控制器内发送电子邮件就可以做到这一点,但我不知道如何调用视图。

任何建议都会很棒!

提前致谢。

Gifster


这个问题已经被提出(并回答)了:

将视图渲染为字符串 https://stackoverflow.com/questions/483091/render-a-view-as-a-string

这是我使用的位:

protected string RenderViewToString<T>(string viewPath, T model, System.Web.Mvc.ControllerContext controllerContext) {
        using (var writer = new StringWriter()) {
            var view = new WebFormView(viewPath);
            var vdd = new ViewDataDictionary<T>(model);
            var viewCxt = new ViewContext(controllerContext, view, vdd, new TempDataDictionary(), writer);
            viewCxt.View.Render(viewCxt, writer);
            return writer.ToString();
        }
    }

此方法的最佳位置是在您的 mvc 项目引用的类库项目中。主要是因为这样您可以轻松地在所有应用程序中重用它。但也因为它既不是应用程序逻辑(因此不属于控制器)也不属于模型。有些东西只是实用程序。

请注意,要使其正常工作,viewPath 参数必须是文件的物理路径,并带有 .aspx 扩展名。您不能使用路由,因为 WebFormView 类需要在其构造函数中使用物理路径。

这将呈现完整视图并考虑母版页。


HTML 电子邮件的健康警告:

HTML 电子邮件和您阅读电子邮件的设备比网站和浏览器的设计更加困难和限制性更大。在一种情况下有效的方法,在另一种情况下则无效。因此,对于 html 电子邮件,您确实必须保持简单!您带有菜单和相关图像以及其他任何内容的可爱页面,只是不适用于所有电子邮件设备。举个例子,images src 属性需要是绝对的并包含域:

这是行不通的:

<img src="/Images/MyImage.gif" ... /> 

位这将:

 <img src="http://www.mywebsite.com/Images/MyImage.gif" ... /> 

有了这些注意事项,它运行良好,我就使用它。只是不要试图向他们发送您网站的全部花招,因为那是行不通的!

更重要的是:

所有 CSS 都必须是内联的,并且仅用于基本样式:颜色、边框、填充。但没有浮动和定位。 CSS 布局在不同设备上的工作方式不一致!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC 将视图渲染为用于电子邮件发送的字符串 的相关文章

随机推荐