2016-03-22 6 views
0

Я хотел бы написать действие контроллера веб-Api, которое отправит электронное письмо в зависимости от результатов. Я хотел бы использовать представление MVC View или Partial с моделью данных для отображения тела письма.Может ли веб-контроллер Api отображать представление в виде строки?

Есть ли способ сделать это?

Я хотел бы что-то вроде этого:

public class NotificationApiController : ApiController 
{ 
    private IMkpContext db; 

    public string ViewNotifications() 
    { 
     var dataModel = GetDataModel(); 
     if (dataModel != null) 
     { 
      SendEmail(dataModel.ToAddress, dataModel.FromAddress, dataModel.Subject, RenderBody("viewName", dataModel); 
     } 

     return string.Empty; 
    } 
} 

Где RenderBody бы посмотреть вверх VIEWNAME, заселить его с данными DataModel и визуализации представления в виде строки.

+0

Я обычно использую библиотеку RazorEngine, чтобы сделать свои взгляды и использовать это для моего электронные письма. Он имеет дополнительное преимущество, позволяя вам объявлять свои представления как строго типизированные. http://antaris.github.io/RazorEngine/ –

+0

Я использую Postal для этой же цели. https://www.nuget.org/packages/Postal.Mvc5/ –

ответ

2

если вы не хотите идти с RazorEngine подхода, предложенного в комментариях, вы можете определить класс, как это:

public static class ViewUtil 
{ 
    public static string RenderPartial(string partialName, object model) 
    { 
     var sw = new StringWriter(); 
     var httpContext = new HttpContextWrapper(HttpContext.Current); 

     // point to an empty controller 
     var routeData = new RouteData(); 
     routeData.Values.Add("controller", "EmptyController"); 

     var controllerContext = new ControllerContext(new RequestContext(httpContext, routeData), new EmptyController()); 

     var view = ViewEngines.Engines.FindPartialView(controllerContext, partialName).View; 

     view.Render(new ViewContext(controllerContext, view, new ViewDataDictionary { Model = model }, new TempDataDictionary(), sw), sw); 

     return sw.ToString(); 
    } 
} 

class EmptyController : Controller { } 
+0

У меня получилось исключение: ошибка CS0103: имя «модель» не существует в текущем контексте. Думаю, мне нужно что-то еще, чтобы передать модель взгляду .... –

Смежные вопросы