2015-07-24 2 views
0

Я пытаюсь создать метод для компиляции вида Razor (я использую Asp Net 5) и преобразовать его в строку, которую я могу отправить в виде тела электронной почты. До сих пор, что у меня есть:Использование AspNet Razor для отправки писем, созданных из шаблонов

   MailMessage mailmessage = new MailMessage("[email protected]",email); 

     var parser = new RazorParser(new CSharpCodeParser(), 
      new HtmlMarkupParser(), 
      null); 
     var result = parser.Parse(new StringReader("<p>Hello world. The time is @DateTime.UtcNow</p>")); 

     mailmessage.Body = ""; // What to put here? 

     mailmessage.IsBodyHtml = true; 
     SmtpClient smtp = new SmtpClient("smtp.test.com"); 
     smtp.Port = 587; 
     smtp.Credentials = // Removed 
     smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
     return smtp.SendMailAsync(mailmessage); 

Я не могу понять, что мне нужно сделать, чтобы преобразовать ParserResult в то полезное для органа по электронной почте, я копал через исходный код сети САШ, но не повезло еще , Кто-нибудь знает как это сделать?

ответ

0

Используйте этот метод, чтобы получить содержимое вид из текущего контроллера в виде строки:

private string getViewContents(string viewName, object model) 
{ 
    var writer = new StringWriter(); 

    ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); 
    var data = new ViewDataDictionary(); 
    data.Model = model; 

    var viewContext = new ViewContext(ControllerContext, viewResult.View, data, new TempDataDictionary(), writer); 
    viewResult.View.Render(viewContext, writer); 

    return writer.GetStringBuilder().ToString(); 
} 
+0

Я нашел проблему в этом коде. Повторите попытку, если у вас есть ошибки. – Rono

+0

Есть ли способ сделать это из контроллера? Я пытаюсь сделать это в файле MessageServices, поэтому я могу просто передать ему имя представления и модель и скомпилировать и отправить электронное письмо с любого контроллера. Если нет, то я могу просто добавить это как метод расширения для контроллера и передать результат методу SendEmail по умолчанию. – CaffeinatedCM

+0

Я бы просто добавил параметр к этой функции, которая принимает объект ControllerContext. Это похоже на самый простой способ. – Rono

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