我想要一个我用于电子邮件的html模板。我想将模型传递给它,让它渲染并返回到字符串变量。
我怎样才能做到这一点?我确信我可以使用asp.net mvc附带的渲染。
我不想在我的控制器内或使用controllercontext对象执行此操作。
答案 0 :(得分:1)
使用@Mitch Rosenburg的评论作为答案:
我正在使用DotLiquid模板。
答案 1 :(得分:0)
我自己没有尝试过,但是我找到了一个名为Postal的库,我打算在我自己的应用程序中使用它来创建一个非常相似的功能。
答案 2 :(得分:0)
您可以使用以下方法执行此操作:
private string ViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
在你的行动方法中你可以像这样使用它
ViewToString("Index", model);
其中model是您要发送到“模板”的模型
答案 3 :(得分:0)
我必须做同样的事情,然后我最终使用HttpWebRequest来“渲染”视图并将结果捕获为字符串。
这个解决方案带来了许多其他问题(获取授权cookie,通过我们的自定义URL安全层等),它感觉效率低下而且草率,但截止日期是截止日期,对吗?
代码看起来像这样:
public string GetEmailBody(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream);
return streamReader.ReadToEnd();
}
希望它对某人有帮助。