2012-05-18 26 views
5

Tôi có ứng dụng C# /. NET hiện đang sử dụng StringBuilder để tạo một email HTML.Cách bao gồm tài liệu HTML trong ứng dụng .NET với các trường biến?

Định dạng thư mới đã được phát triển và hiện bao gồm nhiều định dạng và CSS hơn. Tôi muốn tránh gắn thêm mỗi dòng của tập tin bằng cách sử dụng StringBuilder, vì vậy tôi nghĩ tốt nhất nên đưa tệp HTML làm tài nguyên.

Tuy nhiên, có khoảng 21 biến trong CSS và HTML mà tôi cần thay đổi khi đang di chuyển. Suy nghĩ đầu tiên của tôi là thay thế chúng bằng các trình giữ chỗ String.Format chuẩn ({0}, {1} v.v.) nhưng khi xem HTML, việc xác nhận hợp lệ sẽ phàn nàn về chúng.

Tôi khá bối rối về cách thực hành tốt nhất là lưu trữ tệp HTML 200 dòng và thay đổi các phần của tệp trước khi đưa vào email.

Ví dụ:

Trong CSS, tôi cần phải thay đổi màu sắc của một số yếu tố, như thế này:

#header 
{ 
    background-color: {0}; 
} 

Và trong HTML, tôi cần phải thay đổi dây và URL, như thế này:

<img src="{1}" /> 
<span>{2}</span> 

dường như bao gồm cả HTML như một nguồn lực trong dự án sẽ là tốt nhất, nhưng cố gắng sử dụng String.Format với tài nguyên đó, không phân biệt nếu nó sẽ làm việc, là một phương pháp nghèo becaus e của các lỗi xác nhận nói trên.

Mọi đề xuất?

+1

tại sao vấn đề xác thực không thành công trên "mẫu HTML" trước khi trình giữ chỗ được thay thế? IMHO điểm quan trọng duy nhất là nó xác nhận một cách chính xác SAU KHI thay thế các phần giữ chỗ với một số nội dung! – Yahia

+0

Sau đó, bạn phải nhớ điều đó có nghĩa là gì. Và bạn cần duy trì số lượng đối số nhất quán. Sử dụng các mã thông báo có thể thay thế như <% token_name%> và tạo phương thức tìm thay thế đơn giản để thay thế mã thông báo từ một số từ điển. –

+0

Câu hỏi này giống như một bông hồng trong ngăn tràn tràn đầy cỏ dại. Tôi hy vọng nó nhận được một câu trả lời. –

Trả lời

2

Thay vì sử dụng {1} sử dụng một tên ví dụ Table1HeaderImage, sau đó thay vì sử dụng String.Format sử dụng String.Replace. Bạn có thể có một bộ sưu tập của thingies để đưa vào thehtml sau đó, một vòng lặp nhanh chóng, thậm chí thuộc tính thêm cho tùy chỉnh từ phiên bản người dùng vv

+0

Đơn giản nhưng hiệu quả. – JYelton

+0

Tên đệm của tôi, cũng là một phần của nó. :) –

4

Tôi nghĩ rằng bạn có thể thử t4 tamplate

Với mẫu t4 bạn thậm chí có thể làm những việc phức tạp hơn như

<table> 
<# for (int i = 1; i <= 10; i++) 
    { #> 
    <tr><td>Test name <#= i #> </td> 
     <td>Test value <#= i * i #> </td> </tr> 
<# } #> 
</table> 
0

Những gì tôi làm điều gì đó như thế này là:

StreamReader reader = new StreamReader(Server.MapPath("Email/email.html")); 
string email_html = reader.ReadToEnd(); 
reader.Close(); 

email_html = email_html.Replace("[link]", activation_link); 
+0

Đây thực chất là những gì tôi đã làm; cám ơn vì sự gợi ý. – JYelton

+0

-1: 'StreamReader' cần phải nằm trong khối' using'. –

2

Bạn có thể sử dụng công cụ Dao cạo để hiển thị chuỗi HTML:

<h2>Items:</h2> 
@foreach(var item in list) 
{ 
    <p>Item: @item.Description</p> 
} 

Những câu trả lời này Is it possible to use Razor View Engine outside asp.net cung cấp một số liên kết tốt đẹp để làm như vậy.

0

Tôi sẽ sử dụng <%0%>, <%1%>, v.v. thay vì {0}, {1}, v.v.

Khi chạy, bạn sẽ:

  1. Thay thế tất cả { với {{} với }}
  2. Thay thế tất cả <% với {%> với }
  3. String.Format()

Bạn có thể cũng như Val Bakhtin đã đề xuất và sử dụng tên thay vì số. Sau đó, quá trình này sẽ là đơn giản:

  1. Thay thế tất cả <%name%> với dictionary["name"]
2

Bạn có thể tạo một preprocessed T4 mẫu văn bản tập tin. http://msdn.microsoft.com/en-us/library/ee844259 Một trong những tính năng đẹp của mẫu văn bản T4 là chúng có thể được sử dụng để tự động tạo bất kỳ loại tệp văn bản nào.

+0

+1 nhưng vui lòng đưa ra ví dụ. –

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