Я обрабатываю PartialViews/Models следующим способом, чтобы отправить шаблонные письма.ControllerContext и ViewData Внешняя область действия контроллера - MVC3 C#
Я использую приведенный ниже код для преобразования частичной и модели в строку 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
Вы используете tempdata/viewdata в рендеринге представления ? Если нет, то почему бы не пройти пустые? – Aliostad
Я использую ViewData для установки модели. – Jason
Так почему же это не строго типизированный вид? Вам нужно было использовать свободный просмотр? – Aliostad