代码之家  ›  专栏  ›  技术社区  ›  photo_tom

如何在ASP.NET/MVC中发送电子邮件屏幕

  •  1
  • photo_tom  · 技术社区  · 15 年前

    我有一个由10多个相关的ascx文件组成的应用程序,我们使用html.renderpartial助手在用户浏览器上显示数据。

    我需要通过电子邮件发送与屏幕上的内容重复的数据。我希望能够得到生成的HTML而不必做屏幕刮擦。

    关于如何做这件事有什么建议吗?我只是在努力避免重复工作。

    2 回复  |  直到 13 年前
        1
  •  3
  •   Ian Mercer    14 年前

    http://www.brightmix.com/blog/renderpartial-to-string-in-asp-net-mvc/ 有一个很好的解决方案可以将视图呈现为字符串,这样您就可以通过电子邮件发送它。

    /// Static Method to render string - put somewhere of your choosing
    public static string RenderPartialToString(string controlName, object viewData)
    {
         ViewDataDictionary vd = new ViewDataDictionary(viewData);
         ViewPage vp = new ViewPage { ViewData = vd };
         Control control = vp.LoadControl(controlName);
    
         vp.Controls.Add(control);
    
         StringBuilder sb = new StringBuilder();
         using (StringWriter sw = new StringWriter(sb))
         {
             using (HtmlTextWriter tw = new HtmlTextWriter(sw))
             {
                 vp.RenderControl(tw);
             }
         }
    
         return sb.ToString();
    }
    
        2
  •  3
  •   martin clayton egrunin    13 年前

    在常规的ASP.NET中,可以重写render()并提供自己的htmlwriter来截取呈现的HTML,然后将其复制到传入的htmlwriter。

    我不知道你会如何在MVC中拦截它,但我相信你能做到这一点——特别是如果你在处理输出流的管道中制作了一个新的httpmodule。