问题已经被问过(并回答)了:
将视图作为字符串渲染
这是我使用的代码片段:
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电子邮件中,您真的需要保持简单!您可爱的页面与菜单、相对图像和其他任何东西,在所有电子邮件设备中都不起作用。仅以一个例子为例,图像src属性需要是绝对的,并包括域名:
这不起作用:
<img src="/Images/MyImage.gif" ... />
这将会:
<img src="http://www.mywebsite.com/Images/MyImage.gif" ... />
在遵守这些注意事项的前提下,它能够正常工作并且我使用过。但是不要尝试发送你网站的全部花哨内容,因为那样不会起作用!
更重要的是:
所有CSS必须是内联的,并且仅适用于基本样式:颜色、边框、填充。但是不要使用浮动和定位。CSS布局在不同设备上无法保持一致性!