0

可能重复:
将视图呈现为字符串

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

我希望它像这样工作:

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

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

4

3 回答 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);
于 2012-09-26T21:37:27.803 回答
0

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

于 2012-09-26T21:55:31.647 回答
0

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

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

于 2012-09-26T21:40:08.657 回答