web-dev-qa-db-ja.com

C#コードでHTMLを作成する最良の方法は何ですか?

マークアップはマークアップに残し、コードビハインドに残すべきではないと私は信じています。

コードビハインドでHTMLを作成することが許容できると思う状況になりました。ベストプラクティスが何であるか、またはあるべきかについて、いくつかのコンセンサスが欲しいのですが。

コードビハインドでHTMLをビルドしてもよいのはいつですか?このhtmlを作成する最良の方法は何ですか? (例:Strings、StringBuilder、HTMLWriterなど)

15
Rodney

Razor のようなものはここでは適用されませんか?なぜなら、ビューエンジンを使用して多くのHTML生成を行っている場合は、それを非常に簡単にすることができるからです。また、ASP.NETの外部で使用するために構築されました。

しかし、時にはそれはあなたが必要とするものではありません。 .net(mvc)の一部である TagBuilder クラスの使用を検討しましたか? System.Web.UIには HtmlWriter もあります(Webフォーム用)。 ControlsまたはHtml Helpersを作成している場合は、これらのいずれかをお勧めします。

12
Daniel Little

Html Agility Pack を使用してHTMLをアセンブルし、それをテキストファイルに書き出します。

多くの工数がHtml Agility Packを堅牢かつ HTML準拠 HTMLフレンドリー。

HTMLを生成するサンプルアプリケーションも含まれていると思います。

ホームページから:

サンプルアプリケーション:

ページの固定または生成。ページを好きなように修正したり、DOMを変更したり、ノードを追加したり、ノードをコピーしたりできます。

14
Jim G.

htmltags を使用してHTMLを作成します。

例:

var tag = new HtmlTag("span")
    .Text("Hello & Goodbye")
    .AddClass("important")
    .Attr("title", "Greetings")

そして CSQuery HTMLを解析したい場合

例:

dom.Select("div > span")
    .Eq(1)
    .Text("Change the text content of the 2nd span child of each div");
5
jgauffin

もちろん、HTML Agility Packなどのライブラリがあり、これらの作業を支援します。

もしあなたが本当に既存のライブラリーを使いたくなくて、単純で汚いコードが欲しいなら、私は前に述べた答えのようにいくつかの振る舞いを抽象化するアイデアが好きです。いくつかの理由で文字列とは対照的に、基礎となるStringBuilderを使用するアイデアも気に入っています。

  1. 文字列は文字列ビルダーよりも効率が悪い
  2. StringBuilderは、インデックス付け可能なデータ構造です。

大規模に設計されたHTMLエンジンが必要ない場合は、シンプルで直感的なインターフェースを作成します

AddLineBreak();
AddSimpleTag(string tagName);
AddSimpleTagAt(string tagName, string content, int index);
Output();
2
Tim C

文字列だけを使用する場合は、出力データ内のすべてのHTML予約文字をエスケープすることを忘れないでください。

&    &
>    >
<    &lt;
"    &quot;
'    &apos;

ただし、文字列を直接操作するのではなく、HTML対応のクラスまたはライブラリを使用することをお勧めします。 HTMLWriterはかなり良いスタートのように見えます。

1
Mike Clark