4

仕事で ASP.NET Web アプリケーションを開発していますが、同じ問題が発生し続けています。

コード ビハインドからページに 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>");

問題は、この目的のために ASP.NET の List コントロールを使用したいということです。なぜなら、StringBuilder 構文の数行がコードの読みやすさを妨げているからです。ただし、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 の複雑さを抑えるのではなく、最初からシンプルにすることから始めたいと思います。

4

3 に答える 3

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);

本当にベア メタルに取り掛かる必要がある場合は、StringBuilder の代わりにHtmlTextWriterクラスを使用する必要があります。これは、生の HTML を送り出すためによりカスタム調整されているためです。

于 2009-08-10T02:40:56.097 に答える
2

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

于 2009-08-10T03:43:48.297 に答える
1

LiteralControl には、html を渡すことができるコンストラクターがあります...その方が良いと思います。

new LiteralControl(sb.ToString());

于 2009-08-26T07:41:07.633 に答える