2010-09-08 10 views
5

Html'nin e-postayla gönderilmesini sağlamak için ASP.NET MVC View Engine'i kullanmak iyi bir fikir olabilir mi?ASP.NET MVC'yi E-posta Şablonu Olarak Kullan Motor: İyi Fikir?

Görünümün bir dizeye dönüşmesine izin vermenin mümkün olduğunu biliyorum. Bu, posta mesajını oluşturmak için kullanılabilir. ASP.NET MVC zaten uygulamada kullanıldığından, "posta görünümler" için Brail veya NVelocity kullanmak zorunda kalmadan tüm pratik ASP.NET MVC şeyler kullanacağız.

İyi fikir mi? Herhangi bir uyarı var mı? Örnekler :)?

+1

Yep, harika çalışıyor - Şuna bir göz atmak istersiniz: http://razorengine.codeplex.com/ –

cevap

4

Evet, bu iyi bir fikir ve relatively easy to implement.

+0

Teşekkürler, ne zaman uyumsuzluk davranışı hakkında? Sayfa isteklerini engellemek için e-postayı ayrıştırmak ve göndermek istemiyorum. – Bertvan

+0

Bu durumda bunu yeni bir iş parçacığında veya bir AsyncController kullanarak gerçekleştirebilirsiniz. –

+0

Tamam, bakalım işe yarayacak :) – Bertvan

1

Kişisel olarak bunun iyi bir fikir olduğunu düşünüyorum. Yer tutucularla bir parça işaretlemeyi veritabanına koymaktan kesinlikle daha iyi.

Dezavantajı, bu şablonları düzenlemek, sonra da projeyi yeniden derlemek ve yeniden dağıtmak için Visual Studio'ya gereksiniminiz olmasıdır. Diğer teknik olmayan personele şablonlarla çalışarak "outsource" yapamazsınız.

Ve evet, yeni şablonlar eklemek de kişisel müdahalenizi gerektirir. İşte

+0

Yeniden derleme gerçekten en büyük uyarı. Bu da neden bu yaklaşımdan uzaklaşıyoruz ve XSLT'ye bakmaya başlıyoruz ... – Bertvan

1

, bir uzatma yöntemi olarak RenderPartialToString benim versiyonunu s (ayrıca yollar vb ilgilenir ..):

public static class ExtensionMethods 
{ 
    public static string RenderPartialToString(this ControllerBase controller, string partialName, object model) 
    { 
     var vd = new ViewDataDictionary(controller.ViewData); 
     var vp = new ViewPage 
     { 
      ViewData = vd, 
      ViewContext = new ViewContext(), 
      Url = new UrlHelper(controller.ControllerContext.RequestContext) 
     }; 

     ViewEngineResult result = ViewEngines 
            .Engines 
            .FindPartialView(controller.ControllerContext, partialName); 

     if (result.View == null) 
     { 
      throw new InvalidOperationException(
      string.Format("The partial view '{0}' could not be found", partialName)); 
     } 
     var partialPath = ((WebFormView)result.View).ViewPath; 

     vp.ViewData.Model = model; 

     Control control = vp.LoadControl(partialPath); 
     vp.Controls.Add(control); 

     var sb = new StringBuilder(); 

     using (var sw = new StringWriter(sb)) 
     { 
      using (var tw = new HtmlTextWriter(sw)) 
      { 
       vp.RenderControl(tw); 
      } 
     } 
     return sb.ToString(); 
    } 
} 

kullanımı:

return this.RenderPartialToString("YourPartialView", yourModel); 

umut bu ..

yardımcı olur

jim

0

MVCMailer NuGet'i kullanabilirsiniz - MVC görünüm şablonlarını kullanır ve sadece bir Bunu yapmak için tek satırlık kod!