Шаблоны e-mail'ов в ASP.NET MVC
По аналогии с решением для WebForms, в ASP.NET MVC можно использовать для генерации текста e-mail'ов обычные view. Работающее решение нашлось на одном, к сожалению, не отзывающемся сейчас сайте.
using System;
using System.Web.Mvc;
using System.Web.UI;
using System.Text;
using System.IO;
namespace CrispStudio.Routine.Templates
{
public static class RenderViewToString
{
/*
* http://msug.vn.ua/blogs/bobasoft/archive/2010/01/07/render-partialview-to-string-asp-net-mvc.aspx
*/
public static string RenderPartialView(ControllerContext context, string partialViewName, object viewData)
{
ViewEngineResult result = ViewEngines.Engines.FindPartialView(context, partialViewName);
if (result.View != null)
{
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
{
using (HtmlTextWriter output = new HtmlTextWriter(sw))
{
ViewContext viewContext = new ViewContext(context, result.View, new ViewDataDictionary(viewData), new TempDataDictionary(), output);
result.View.Render(viewContext, output);
}
}
return sb.ToString();
}
return String.Empty;
}
public static string RenderView(ControllerContext context, string viewName, object model, ViewDataDictionary additional = null)
{
ViewEngineResult result = ViewEngines.Engines.FindView(context, viewName, String.Empty);
if (result.View != null)
{
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
{
using (HtmlTextWriter output = new HtmlTextWriter(sw))
{
var viewData = new ViewDataDictionary(model);
if (additional != null && additional.Count > 0)
{
foreach (var item in additional)
{
viewData.Add(item);
}
}
ViewContext viewContext = new ViewContext(context, result.View, viewData, new TempDataDictionary(), output);
result.View.Render(viewContext, output);
}
}
return sb.ToString();
}
return String.Empty;
}
}
}
