如何在具有变量字段的 .NET 应用程序中包含 HTML 文档

本文关键字:应用程序 NET 包含 文档 HTML 字段 变量 | 更新日期: 2023-09-27 18:34:33

我有一个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 是一种糟糕的方法,无论它是否有效。

有什么建议吗?

如何在具有变量字段的 .NET 应用程序中包含 HTML 文档

我想你可以试试t4 tamplate

使用 t4 模板,您甚至可以执行更复杂的操作,例如

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

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

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

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

不使用{1}使用名称,例如 Table1HeaderImage,而不是使用 String.Format,请使用 String.Replace。然后你可以有一个东西的集合放在html中,一个快速循环,甚至是额外的属性,用于从用户版本自定义,等等。

您可以创建预处理的 T4 文本模板文件。http://msdn.microsoft.com/en-us/library/ee844259T4文本模板的一个不错的功能是它们可用于自动生成任何类型的文本文件。

我所做的是这样的:

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%><%1%>等代替{0}{1}等。

在运行时,您将:

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

你也可以按照Val Bakhtin的建议去做,使用名称而不是数字。那么这个过程很简单:

  1. 将所有<%name%>替换为dictionary["name"]