2013-03-12 10 views
12

Chciałbym użyć mojego widoku Razor jako szablonu do wysyłania e-maili, , więc chciałbym "zapisać" mój szablon w widoku, odczytać go w kontrolerze jako ciąg, zrobić niezbędne zamienniki, a następnie wysłać to.Jak przekonwertować widok maszynki do struny?

Mam rozwiązanie, które działa: mój szablon jest hostowany gdzieś jako strona HTML, ale chciałbym umieścić go w mojej aplikacji (to znaczy moim zdaniem). Nie wiem, jak odczytać widok jako ciąg w moim kontrolerze.

Odpowiedz

17

Używam następujących. Umieść go na swoim kontrolerze bazowym, jeśli masz go, w ten sposób możesz uzyskać do niego dostęp we wszystkich kontrolerach.

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

napisał coś bardzo podobnego niedawno. ból w $$ –

+0

@DaveA Hehe tak, to naprawdę ból, powinien być łatwiejszy. – mattytommo

+0

Jak mogę zrobić to samo z .NET CORE? –

6

Spójrz na bibliotekę RazorEngine, która robi dokładnie to, co chcesz. Używałem go już wcześniej w szablonach wiadomości e-mail i działa świetnie.

Można po prostu zrobić coś takiego:

// 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

Jest to przydatne, ale mam już napisany kod, którego nie chcę zmieniać. Chciałbym tylko zapisać mój szablon (html) w widoku i dosłownie odczytywać html z widoku jako ciąg i zastępować w kontrolerze. –

+0

Zrozumiano. Robiłem to, co robisz w przeszłości. Jednak po odkryciu biblioteki RazorEngine odkryłem, że nie tylko ułatwia ona parsowanie prac nad szablonem, ale także znacznie ułatwia obsługę szablonów. Możesz przechowywać szablony w bazie danych lub w miejscu, gdzie możesz je edytować bez edytowania kodu. –

Powiązane problemy