【问题标题】:MVC3 load View into string for mail [duplicate]MVC3将视图加载到邮件字符串中[重复]
【发布时间】:2012-09-18 14:46:20
【问题描述】:

可能重复:
Render a view as a string

我想将一个视图加载到一个变量中,以便我可以通过邮件发送它。

我希望它像这样工作:

var mail = new SmtpClient();
var mailView = View("registration.cshtml", userModel);
mail.Send(FromAddress, userModel.Email, mailView.ViewBag.Title, mailView.ToString());

除了 ToString() 之外的所有东西都有效。如何强制 MVC 编译视图?

【问题讨论】:

  • 我最终使用了该站点上另一个用户的this 方法。

标签: c# asp.net asp.net-mvc-3


【解决方案1】:

这里有一个小方法供你放入控制器。

    protected string RenderViewToString(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();
        }
    }

然后你可以像这样使用它:

string viewString = RenderViewToString("viewName", yourModel);

【讨论】:

  • 这个方法属于什么命名空间/类?我没有。是 MVC4 吗?
  • @manuFS 继承自Controller。我以为你会在控制器中执行此操作。
  • 我是,但它并没有出现在我的智能感知上。 ://
  • 嗯...奇怪,我以为它是Controller 的一部分。显然,我工作的公司已经实施了他们自己的。几秒钟后检查我的编辑
  • 这看起来很像我在另一个 SO 答案中使用的代码。
【解决方案2】:

您实际上不太可能将视图发送给用户(即,您将呈现给浏览器的网页)。您可能想要的是一种将 Razor 模板呈现到电子邮件的方法。为此,您可以使用多种工具。例如,我使用 FluentEmail,它可以很好地呈现模板。

从软件工程的角度来看,无论如何让您的控制器呈现电子邮件并不是一个好习惯。这应该封装到业务流程中。让您的控制器呈现电子邮件违反了单一职责原则。

【讨论】:

  • FluentEmail 没有多部分支持 - 这对我来说是一个交易破坏者。
【解决方案3】:

我同意,从控制器发送数据是个坏主意。例如使用 MSMQ。也看看这个链接:

【讨论】:

  • 我不知道你想告诉我什么?如果不是来自控制器,我还会从哪里发送邮件?一个用户在我的网站上注册,他得到了两个视图。一个网站,一封邮件。我真的不明白。
  • @manuFS 线程数量有限,所以用处理请求的线程发送邮件不好,不能保证他会很快执行(网络错误等)。这个想法是:网站只创建邮件和邮件服务发送它们,像这样:Use of MSMQ for Sending Bulk Mails
  • 啊,我明白了。好吧,这不是问题,因为这只是一封注册邮件,并且该网站预计永远不会有超过 10 个在线用户。如果我期望有更大的用户群,我会考虑这个,谢谢。
猜你喜欢
  • 2014-08-07
  • 2016-04-10
  • 2017-07-01
  • 2011-12-12
  • 1970-01-01
  • 2012-12-15
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多