0

これは個人の好みによると思いますが、あなたならどちらに行きますか?

StringBuilder markup = new StringBuilder();

foreach (SearchResult image in Search.GetImages(componentId))
{
    markup.Append(String.Format("<div class=\"captionedImage\"><img src=\"{0}\" width=\"150\" alt=\"{1}\"/><p>{1}</p></div>", image.Resolutions[0].Uri, image.Caption));
}

LiteralMarkup.Text = markup.ToString();

対。

StringBuilder markup = new StringBuilder();

foreach (SearchResult image in Search.GetImages(componentId))
{
    markup.Append(String.Format(@"<div class=""captionedImage""><img src=""{0}"" width=""150"" alt=""{1}""/><p>{1}</p></div>", image.Resolutions[0].Uri, image.Caption));
}

LiteralMarkup.Text = markup.ToString();

または、これをまったく実行せず、代わりに HtmlTextWriter クラスを使用する必要がありますか?

編集:いくつかの本当に良い提案がここにあります。2.0 フレームワークを使用しているため、LINQ は使用できません

4

5 に答える 5

3

個人的には、最初のオプションを選択します。指摘しておくと、コードを節約するための簡単なヒントがここにあります。StringBuilder にAppendFormatを使用できます。

編集: HtmlTextWriter アプローチでは、より構造化された結果が得られます。生成する HTML の量が増えた場合、これは明らかな選択です。または、HTML ファイルを使用し、それをテンプレートとして使用し、場合によっては文字列を置換する

ASP.NET ユーザー コントロールは、テンプレート化に適したもう 1 つの選択肢です。

于 2009-02-26T15:43:14.483 に答える
2

私は好むだろう:

StringBuilder markup = new StringBuilder();
string template = "<div class=\"captionedImage\"><img src=\"{0}\" width=\"150\" alt=\"{1}\"/><p>{1}</p></div>";

foreach (SearchResult image in Search.GetImages(componentId))
{
   markup.AppendFormat(template,image.Resolutions[0].Uri, image.Caption);
}

LiteralMarkup.Text = markup.ToString();

別の回答で述べたように、AppendFormat() を使用します。

HTMLテンプレートのSharpTemplateを見てください。少量のHTMLでも読みやすくなっています。

于 2009-02-26T15:46:08.720 に答える
1

HTMLコントロールを作成するためのヘルパークラスをいくつか作成したので、コードは次のようになります。

foreach (SearchResult image in Search.GetImages(componentId)) {
  ContainerMarkup.Controls.Add(
    Tag.Div.CssClass("captionedImage")
    .AddChild(Tag.Image(image.Resolutions[0].Uri).Width(150).Alt(Image.Caption))
    .AddChild(Tag.Paragraph.Text(Image.Caption)));
}

最初は単純に見えないかもしれませんが、操作は簡単で、値の適切なhtmlエンコーディングを行うコントロールを作成し、文字列のエスケープの問題はありません。

于 2009-02-26T16:00:47.233 に答える