And*_*ndy 7 asp.net-mvc asp.net-mvc-views asp.net-mvc-2
我想使用MVC视图来创建电子邮件的正文,我遇到过这个问题(http://www.brightmix.com/blog/renderpartial-to-string-in-asp-net-mvc/)但它没有似乎适用于强类型视图(ViewContext为null).但是我想要的东西可以呈现包括母版页在内的完整视图.
我想如果有一种方法只是调用一个没有重定向的视图,只是写一个不同的流并在控制器内发送可能会这样做的电子邮件,但我无法弄清楚如何调用一个视图.
任何建议都会很棒!
提前致谢.
Gifster
awr*_*ley 15
已经提出(并已回答)这个问题了:
这是我使用的一点:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
此方法的最佳位置是您的mvc项目引用的类库项目.主要是因为这样您可以轻松地在所有应用中重复使用它.但也因为它既不是应用程序逻辑(因此不属于控制器)也不属于模型.有些东西只是公用事业.
请注意,要使其生效,viewPath参数必须是文件的物理路径,并带有.aspx扩展名.您不能使用路由,因为WebFormView类在其构造函数中需要物理路径.
这将呈现完整视图并考虑母版页.
HTML电子邮件和您阅读它们的设备比网站和浏览器更难以设计.什么在一个工作,什么在另一个工作.所以使用HTML电子邮件,你真的必须保持简单!你的可爱页面包含菜单和相关图片以及其他任何内容,只能在所有电子邮件设备中使用.仅作为示例,图像src属性需要是绝对的并包括域:
这不起作用:
<img src="/Images/MyImage.gif" ... />
Run Code Online (Sandbox Code Playgroud)
这将是:
<img src="http://www.mywebsite.com/Images/MyImage.gif" ... />
Run Code Online (Sandbox Code Playgroud)
有了这些警告,它工作正常,我使用它.只是不要试图向他们发送你的网站的完整噱头,cos将无法正常工作!
更重要的是:
所有CSS必须是INLINE并且仅用于基本样式:颜色,边框,填充.但没有漂浮和定位.CSS布局不能跨设备一致地工作!
| 归档时间: |
|
| 查看次数: |
9030 次 |
| 最近记录: |