Я рендеринг PartialViews / Models с помощью метода ниже, чтобы шаблон электронной почты, которые будут отправлены.
Я использую приведенный ниже код для преобразования партиала и модели в html-строку, которую я могу передать в свой код отправки электронной почты.
public class BaseController : Controller
{
public string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
throw new ArgumentException("No View Path Provided.");
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
}
В настоящее время это живет в BaseController, я хотел бы переместить его в вспомогательный метод, чтобы я мог также перемещать построение / отправку модели электронной почты из контроллера.
Проблема в том, что у меня нет доступа к ViewData / TempData / ControllerContext
Я могу создать ControllerContext, но я не знаю, что делать с ViewData / TempData.
Вот как я бы использовал то, что у меня есть в контроллере:
//Do Stuff in Controller
var html = RenderPartialViewToString("~/Views/Mail/_ForgotPassword.cshtml", new MailModel { Username = "Skrillex", SomethingElse = "foo" });
//Send the Email