Подтвердить что ты не робот

Как преобразовать вид Razor в строку?

Я хотел бы использовать мой взгляд Razor как своего рода шаблон для отправки электронных писем, поэтому я хотел бы "сохранить" мой шаблон в представлении, прочитать его в контроллере как строку, внести необходимые замены и затем отправить его.

У меня есть решение, которое работает: мой шаблон размещен где-то как HTML-страница, но я хотел бы поместить его в свое приложение (то есть на мой взгляд). Я не знаю, как читать представление в виде строки в моем контроллере.

4b9b3361

Ответ 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);