【问题标题】:How to get HTML of dynamic page in asp.net MVC如何在asp.net MVC中获取动态页面的HTML
【发布时间】:2016-04-06 07:35:05
【问题描述】:

我有以下两种不同的看法。

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

第二个view 有一个button 发送电子邮件。它将通过电子邮件发送发票。 发票电子邮件格式在第一次查看时生成。

当我们点击电子邮件button 时,它会转到controllers 然后model 等等。

我想访问controllermodel 中第一个viewHTML,以便我可以通过电子邮件发送。

我不知道我们如何在 MVC 中做到这一点。

谁能告诉我完成这项任务的最佳方法是什么。

【问题讨论】:

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


    【解决方案1】:

    将电子邮件模板提取到部分视图中(以便您可以重复使用它),然后 您可以在控制器操作中将部分视图呈现为字符串,以便将其用作电子邮件正文:

    这个取自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...
    }
    

    【讨论】:

      【解决方案2】:

      您需要重新生成HTML 以通过电子邮件发送第一个视图,因此您可以使用ViewEngines.Engines.FindView 获取您的视图,然后使用View.Render 渲染它,然后通过电子邮件发送。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-16
        • 2017-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-13
        • 1970-01-01
        相关资源
        最近更新 更多