我想将View加载到变量中,以便我可以通过Mail发送它。
我希望它能像这样工作:
var mail = new SmtpClient();
var mailView = View("registration.cshtml", userModel);
mail.Send(FromAddress, userModel.Email, mailView.ViewBag.Title, mailView.ToString());
除了ToString()之外的所有东西都有效。如何强制MVC编译视图?
答案 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。另请看这个链接: