Hey everyone,
This is just a short post showing how to render views as strings. I’ve used this as a quick way to generate email templates. The logic to render a view as a string is as follows:
public static string RenderRazorViewToString(Controller controller, string viewName, string content) { controller.ViewBag.Content = content; using (var sw = new StringWriter()) { var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName); var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw); viewResult.View.Render(viewContext, sw); viewResult.ViewEngine.ReleaseView(controller.ControllerContext, viewResult.View); return sw.GetStringBuilder().ToString(); } }
The Email Template: Views/Emails/DefaultTemplate
@{ Layout = null; } Easy Carts
|
|
![]() |
In your controller:
public String TestEmail(String content) { Email email = new Email() { To = "lls@live.com.au", From = Email.Fields.From.NoReply, Body = content, Subject = "Test", TemplateName = @"~ViewsEmailsDefaultTemplate.cshtml", UseTemplate = true }; email.SendEmail(this); db.Emails.Add(email); db.SaveChanges(); return email.Body.ToString(); }
If you looking to implement this with your emails, note that it builds on top of the email class we created back in this post: http://www.whatibroke.com/?p=963
If you’re just going to be using it directly within the controller, using the original code from over StackOverflow will probably be your best bet: http://stackoverflow.com/a/2759898/522859
Leave a Reply