5

現在 StringBuilder を使用して HTML 電子メール メッセージを生成する C#/.NET アプリがあります。

新しいメッセージ形式が開発され、より多くの形式と 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 tamplateを試すことができると思います

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 テキスト テンプレートの優れた機能の 1 つは、あらゆる種類のテキスト ファイルを自動生成するために使用できることです。

于 2012-05-19T08:37:15.740 に答える
0

、などの代わりに、、などを<%0%>使用します。<%1%>{0}{1}

実行時に、次のことを行います。

  1. {すべてを{{}で置き換えます}}
  2. <%すべてを{%>で置き換えます}
  3. String.Format()

Val Bakhtin が提案したように、数字の代わりに名前を使用することもできます。その場合、プロセスは次のようになります。

  1. すべて<%name%>dictionary["name"]
于 2012-05-18T17:54:50.677 に答える
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 に答える