MVC3加载查看到邮件的字符串

时间:2012-09-26 21:35:56

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

  

可能重复:
  Render a view as a string

我想将View加载到变量中,以便我可以通过Mail发送它。

我希望它能像这样工作:

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

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

3 个答案:

答案 0 :(得分:1)

这是ya放入你的控制器的一个小方法。

    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);

答案 1 :(得分:0)

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

从软件工程的角度来看,无论如何让控制器呈现电子邮件并不是一种好的做法。这应该封装到业务流程中。让您的控制器呈现电子邮件违反了单一责任委托人。

答案 2 :(得分:0)

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