这个问题已经被提出(并回答)了:
将视图渲染为字符串 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 布局在不同设备上的工作方式不一致!