5

我有一个 C#/.NET 应用程序,它当前使用 StringBuilder 生成 HTML 电子邮件。

一种新的消息格式已经被开发出来,现在包括更多的格式和 CSS。我想避免使用 StringBuilder 附加文​​件的每一行,所以我认为最好将 HTML 文件作为资源包含在内。

但是,CSS 和 HTML 中有大约 21 个变量,我需要随时更改它们。我的第一个想法是用标准的 String.Format 占位符({0}、{1} 等)替换它们,但是在查看 HTML 时,验证会抱怨这些。

对于存储 200 行 HTML 文件并在包含在电子邮件中之前更改部分内容的最佳做法,我感到很困惑。

例子:

在 CSS 中,我需要更改某些元素的颜色,如下所示:

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

在 HTML 中,我需要更改字符串和 URL,如下所示:

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

似乎最好将 HTML 作为资源包含在项目中,但是由于上述验证错误,尝试将 String.Format 与该资源一起使用,无论它是否有效,都是一种糟糕的方法。

有什么建议么?

4

6 回答 6

5

我想你可以试试t4 模板

使用 t4 模板,您甚至可以做更复杂的事情,例如

<table>
<# for (int i = 1; i <= 10; i++)
   { #>
     <tr><td>Test name <#= i #> </td>
         <td>Test value <#= i * i #> </td> </tr>
 <# } #>
</table>
于 2012-05-18T17:13:12.080 回答
3

您可以使用 Razor 引擎呈现 HTML 字符串:

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

这些答案是否可以在 asp.net 之外使用 Razor View Engine提供一些不错的链接。

于 2012-05-18T17:39:20.877 回答
2

不要使用 {1},而是使用名称,例如 Table1HeaderImage,然后不要使用 String.Format,而是使用 String.Replace。然后,您可以将一组东西放入 html 中,快速循环,甚至是用户版本自定义的额外属性等。

于 2012-05-18T17:14:08.433 回答
2

您可以创建一个预处理的 T4 文本模板文件。 http://msdn.microsoft.com/en-us/library/ee844259 T4 文本模板的优点之一是它们可以用来自动生成任何类型的文本文件。

于 2012-05-19T08:37:15.740 回答
0

我所做的是这样的:

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

email_html = email_html.Replace("[link]", activation_link);
于 2012-05-18T17:16:18.953 回答
0

我会使用<%0%>,<%1%>等代替{0},{1}等。

在运行时,您将:

  1. {{{}替换所有}}
  2. <%{%>替换所有}
  3. String.Format()

您也可以按照 Val Bakhtin 的建议进行操作,并使用名称而不是数字。那么这个过程将很简单:

  1. 全部替换<%name%>dictionary["name"]
于 2012-05-18T17:54:50.677 回答