Как преобразовать вид Razor в строку?
Я хотел бы использовать мой взгляд Razor как своего рода шаблон для отправки электронных писем,
поэтому я хотел бы "сохранить" мой шаблон в представлении, прочитать его в контроллере как строку, внести необходимые замены и затем отправить его.
У меня есть решение, которое работает: мой шаблон размещен где-то как HTML-страница, но я хотел бы поместить его в свое приложение (то есть на мой взгляд). Я не знаю, как читать представление в виде строки в моем контроллере.
Ответы
Ответ 1
Я использую следующее. Поместите его на свой базовый контроллер, если он у вас есть, и вы сможете получить доступ к нему во всех контроллерах.
public static string RenderPartialToString(Controller controller, string viewName, object model)
{
controller.ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
Ответ 2
Посмотрите на библиотеку RazorEngine, которая делает именно то, что вы хотите. Я использовал его раньше для шаблонов электронной почты, и он отлично работает.
Вы можете просто сделать что-то вроде этого:
// Read in your template from anywhere (database, file system, etc.)
var bodyTemplate = GetEmailBodyTemplate();
// Substitute variables using Razor
var model = new { Name = "John Doe", OtherVar = "Hello!" };
var emailBody = Razor.Parse(bodytemplate, model);
// Send email
SendEmail(address, emailBody);