2010-09-08 25 views
5

Bạn có nên sử dụng ASP.NET MVC View Engine để hiển thị html được gửi qua email không?Sử dụng ASP.NET MVC làm Công cụ tạo mẫu email: Ý tưởng hay?

Tôi biết có thể cho phép chế độ xem hiển thị thành chuỗi. Vì vậy, có thể được sử dụng để xây dựng thư. Kể từ khi ASP.NET MVC đã được sử dụng trong ứng dụng, tôi nhận được để sử dụng tất cả các công cụ ASP.NET MVC thực tế mà không cần phải sử dụng Brail hoặc NVelocity cho "xem thư" của tôi.

Ý tưởng hay? Bất kỳ cảnh báo nào? Ví dụ :)?

+1

Đúng, hoạt động tuyệt vời - Bạn sẽ muốn có một cái nhìn tại đây: http://razorengine.codeplex.com/ –

Trả lời

4

Có ý tưởng hay và relatively easy to implement.

+0

Cảm ơn, những gì về hành vi không đồng bộ? Tôi không muốn phân tích và gửi email để chặn các yêu cầu trang. – Bertvan

+0

Trong trường hợp này, bạn có thể thực hiện điều này trong một chủ đề mới hoặc sử dụng AsyncController. –

+0

Được rồi, hãy xem điều này có hiệu quả không :) – Bertvan

1

Cá nhân tôi nghĩ đó là một ý tưởng hay. Chắc chắn tốt hơn là đặt một phần đánh dấu với phần giữ chỗ vào cơ sở dữ liệu.

Điểm bất lợi là bạn sẽ cần Visual Studio để chỉnh sửa các mẫu đó sau đó biên dịch lại và triển khai lại dự án. Bạn sẽ không thể "thuê ngoài" làm việc với các mẫu cho các nhân viên phi kỹ thuật khác.

Và có, việc thêm mẫu mới cũng sẽ yêu cầu sự can thiệp cá nhân của bạn.

+0

Biên dịch lại thực sự là cảnh báo lớn nhất. Đó cũng là lý do tại sao, chúng tôi đang bước ra khỏi phương pháp này và bắt đầu xem xét XSLT ... – Bertvan

1

đây, s phiên bản của tôi về RenderPartialToString như một phương pháp mở rộng (mà cũng sẽ chăm sóc của con đường vv ..):

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(); 
    } 
} 

sử dụng:

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

hy vọng điều này giúp ..

jim

0

Bạn có thể sử dụng MVCMailer NuGet - nó sử dụng mẫu xem MVC và bạn chỉ cần viết một dòng mã để làm điều này!

Các vấn đề liên quan