如何在asp.net MVC中获取动态页面的HTML

时间:2016-04-06 07:35:05

标签: asp.net asp.net-mvc asp.net-mvc-4 razor

我有两种不同的观点如下。

First: /Invoice/Print/?InvID=12345
Second: /Account/Index

第二个view有一个button来发送电子邮件。它将通过电子邮件发送发票。 在第一个视图上生成发票电子邮件格式。

当我们点击电子邮件button时,会转到controllers然后model,依此类推。

我想访问HTMLviewcontroller的{​​{1}},以便我可以通过电子邮件发送。{/ p>

我没有任何线索知道我们如何在MVC中做到这一点。

任何人都可以告诉我实现这项任务的最佳方法是什么。

2 个答案:

答案 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...
}