2013-03-12 25 views
12

Razor görünümümü, e-posta göndermek için bir çeşit şablon olarak kullanmak istiyorum, , bu yüzden şablonumu bir görünümde "kaydetmek" istiyorum, bir dizi olarak denetleyicide okumak istiyorum, gerekli bazı değiştirmeleri yapın ve gönderin o.Bir Razor görünümünü bir dizeye nasıl dönüştürürsünüz?

Çalıştığım bir çözüm var: Şablonum bir HTML sayfası olarak bir yerde barındırılıyor, ancak uygulamayı uygulamaya koymak istiyorum (örneğin, benim görüşüme göre). Denetleyicimde bir görünümü nasıl bir görünüm olarak okuyacağımı bilmiyorum.

cevap

17

Aşağıdakileri kullanıyorum. Eğer varsa, tüm denetleyicilere erişebildiğiniz şekilde, temel denetleyicinize koyun.

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

son zamanlarda çok benzer şeyler yazdım. Bir ağrı –

+0

@DaveA Hehe evet, bu gerçekten bir acı, daha kolay olmalı. – mattytommo

+0

.NET CORE ile aynı şeyi nasıl yapabilirim? –

6

tam olarak ne istediğini yapar, hangi RazorEngine kütüphanede bir göz atın. E-posta şablonları için daha önce kullandım ve harika çalışıyor.

Sadece böyle bir şey yapabilirsiniz:

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

Bu faydalıdır, ancak değiştirmek istemediğim bazı kodlarım var. Yalnızca şablonumu (html) görüntülemeye kaydetmek ve tam anlamıyla html'yi dize olarak görüntülemek ve denetleyicide değişiklik yapmak istiyorum. –

+0

Anlaşıldı. Geçmişte yaptığınızı yaptım. Bununla birlikte, RazorEngine kütüphanesini keşfettiğimde, sadece şablonun çok daha kolay ayrıştırılmasını sağladığını değil, aynı zamanda şablonlarınızı sürdürmeyi çok daha kolay hale getirdiğini keşfettim. Şablonları bir veritabanında veya kodu düzenlemeden düzenleyebileceğiniz bir yerde saklayabilirsiniz. –

İlgili konular