我有两种不同的观点如下。
First: /Invoice/Print/?InvID=12345
Second: /Account/Index
第二个view
有一个button
来发送电子邮件。它将通过电子邮件发送发票。
在第一个视图上生成发票电子邮件格式。
当我们点击电子邮件button
时,会转到controllers
然后model
,依此类推。
我想访问HTML
或view
中controller
的{{1}},以便我可以通过电子邮件发送。{/ p>
我没有任何线索知道我们如何在MVC中做到这一点。
任何人都可以告诉我实现这项任务的最佳方法是什么。
答案 0 :(得分:0)
您需要重新生成HTML
以通过电子邮件发送第一个视图,这样您就可以使用ViewEngines.Engines.FindView
获取您的视图,然后使用View.Render
进行渲染,然后通过电子邮件发送。
答案 1 :(得分:0)
将电子邮件模板解压缩到部分视图中(以便您可以重复使用),然后 您可以将局部视图渲染为控制器操作中的字符串,以便将其用作电子邮件正文:
从Render a view as a string获取的此方法将允许您将部分视图呈现为字符串:
public string RenderRazorViewToString(string viewName, object model)
{
ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext,
viewName);
var viewContext = new ViewContext(ControllerContext, viewResult.View,
ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
在应发送电子邮件的控制器操作中,您可以执行以下操作:
public ActionResult SendEmail(SomeModel model)
{
//generate a model for an email:
var emailModel = ....;
//assuming that _EmailTemplate.cshtml is a partial view that contains the email template
var emailBody = this.RenderRazorViewToString("_EmailTemplate",emailModel);
//send the email here...
}