2009-08-10 9 views
4

私は仕事中にASP.NET Webアプリケーションを開発していますが、同じ問題に取り組んでいます。クリーンな出力を備えたASP.NET HTMLコントロール?

時々、コードビハインドからページにHTMLを書きたいと思っています。たとえば、GET変数 "view"の値によって出力が異なるページEditor.aspxがあります。言い換えると、 "Editor.aspx?view = apples"は "Editor.aspx?view = oranges"とは異なるHTMLを出力します。

このHTMLは現在StringBuilderで出力されています。例えば、私はリストを作成したい場合、私は次の構文を使用する場合があります。

myStringBuilder.AppendLine("<ul id=\"editor-menu\">"); 
myStringBuilder.AppendLine("<li>List Item 1</li>"); 
myStringBuilder.AppendLine("</ul>"); 

問題は、StringBuilderの構文の数行が私を妨げるので、私はむしろ、この目的のためにASP.NETのリストコントロールを使用するだろうということですコードの可読性しかし、ASP.NETコントロールでは、一意のID、インラインスタイル、および時折のインラインJavaScriptのブロックで複雑なHTMLを出力する傾向があります。

私の質問は、単純な汎用HTMLタグを表すASP.NETコントロールはありますか?つまり、次の例のようなコントロールがあります:

HTMLTagControl list = new HTMLTagControl("ul"); 
list.ID = "editor-menu"; 
HTMLTagControl listItem = new HTMLTagControl("li"); 
listItem.Text = "List Item 1"; 
list.AppendChild(listItem); 
私はラッパーがある知っている

と、代わりにASP.NETの複雑さを飼いならすのそのようなものが、私はむしろ、取得-行くからシンプルで始まります。

答えて

8

は、汎用のHTMLタグを表すASP.NETコントロールですか?

はい、それは限り、あなたはありませんしたい正確に何として

:) HtmlGenericControlと呼ばれていますが、あなたは簡単にそれを回避することができます:

HtmlGenericControl list = new HtmlGenericControl("ul"); 
list.ID = "editor-menu"; 
HtmlGenericControl listItem = new HtmlGenericControl("li"); 
listItem.InnerText = "List Item 1"; 
list.Controls.Add(listItem); 

あなたが本当にダウンに取得する必要がある場合ベアメタルの場合は、生のHTMLをポンピングするためにカスタム化されているため、StringBuilderの代わりにHtmlTextWriterクラスを使用する必要があります。

+0

HtmlTextWriterのヒントありがとうございます。 「簡単に周りにいる」という意味はどうですか? – attack

+0

私は何を意味するかを示すコードサンプルを追加しました。基本的には、私が意味していたのはすべて正しいプロパティを使用するだけです。また、実際に出力を完全に制御したい場合は、HtmlTextWriterを使用してください。これは、すべてのコントロールが最終的にRender()メソッドのフードで使用されるためです。それは少しの学習曲線を持っています。 – Josh

2

空のコントロールにstringbuilderの結果を割り当てる場合は、<asp:Literal />コントロールを使用できます。

1

LiteralControlはあなたのHTMLを渡すことができるコントラクタを持っています... 私はそれが良いと思います。

新しいLiteralControl(sb.ToString());

関連する問題