我想利用Razor视图的模型绑定/呈现功能来为我从ASP.NET MVC应用程序发送的电子邮件生成HTML体内容。
有没有办法将视图呈现为字符串,而不是将其作为GET请求的ActionResult返回?
为了说明,我正在寻找将执行以下操作的东西……
public ActionResult SendEmail(int id)
{
EmailDetailsViewModel emailDetails = EmailDetailsViewModel().CreateEmailDetails(id);
// THIS IS WHERE I NEED HELP...
// I want to pass my ViewModel (emailDetails) to my View (EmailBodyRazorView) but instead of Rending that to the Response stream I want to capture the output and pass it to an email client.
string htmlEmailBody = View("EmailBodyRazorView", emailDetails).ToString();
// Once I have the htmlEmail body I'm good to go. I've got a utilityt that will send the email for me.
MyEmailUtility.SmtpSendEmail("stevejobs@apple.com", "Email Subject", htmlEmailBody);
// Redirect another Action that will return a page to the user confirming the email was sent.
return RedirectToAction("ConfirmationEmailWasSent");
}
发布于 2011-03-11 07:08:49
如果您只需要将视图呈现为一个字符串,请尝试如下所示:
public string ToHtml(string viewToRender, ViewDataDictionary viewData, ControllerContext controllerContext)
{
var result = ViewEngines.Engines.FindView(controllerContext, viewToRender, null);
StringWriter output;
using (output = new StringWriter())
{
var viewContext = new ViewContext(controllerContext, result.View, viewData, controllerContext.Controller.TempData, output);
result.View.Render(viewContext, output);
result.ViewEngine.ReleaseView(controllerContext, result.View);
}
return output.ToString();
}
您需要传入视图的名称以及来自控制器操作的ViewData和ControllerContext。
发布于 2011-03-11 06:20:16
您可以查看Postal,了解如何使用视图发送电子邮件。
发布于 2011-03-11 06:20:23
https://stackoverflow.com/questions/5266586
复制相似问题