How do you convert a Razor view to a string?

前端 未结 2 1887
终归单人心
终归单人心 2021-02-05 19:19

I would like to use my Razor view as some kind of template for sending emails, so I would like to \"save\" my template in a view, read it into controller as a string, do some ne

相关标签:
2条回答
  • 2021-02-05 19:45

    Take a look at the RazorEngine library, which does exactly what you want. I've used it before for email templates, and it works great.

    You can just do something like this:

    // 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);
    
    0 讨论(0)
  • 2021-02-05 20:00

    I use the following. Put it on your base controller if you have one, that way you can access it in all controllers.

    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();
        }
    }
    
    0 讨论(0)
提交回复
热议问题