ASP.NET MVC:LINQ to XMLを使用して(X)HTMLをレンダリングする
-
06-07-2019 - |
質問
ASP.NET MVCの View-engines に関する多くの議論があり、インライン<!> quot; tag-soup <!> quot;に対する批判もありました。 forループとそのようなもので。
代替手段または補完手段は、インラインメソッド呼び出しであるHTMLヘルパーを使用することです。
今日、ASP.NET MVCのHTMLヘルパーを見ると、 TagBuilder というクラスを使用しています。
私の提案は、 LINQ to XMLを使用して厳密に型指定され、正しくフォーマットされた(X)HTMLを取得することです:
XDocument output = new XDocument();
XElement root = new XElement("div",
new XAttribute("class", "root_item"));
XElement iconImage = new XElement("img",
new XAttribute("src", ResolveUrl("~/image.gif")),
new XAttribute("alt", "This is an image"));
XElement link = new XElement("a",
new XAttribute("class", "link"),
new XAttribute("href", "http://google.com"),
new XText("Link to Google"));
root.Add(link);
root.Add(iconImage);
output.Add(root);
ボタンが新しくなり、別のコントロールのControl-collectionに追加できるWebFormsの厳密に型指定されたコントロールに似ているため、気に入っています。
これに明らかな問題や制限はありますか
解決
上記の方法には2つの問題が考えられます。 まず、
XElement iconImage = new XElement("img",
new XAttribute("src", ResolveUrl("~/image.gif")),
new XAttribute("alt", "This is an image"));
上記の内容を参照すると、次のようになります:
<img src=<%=whatever%> alt=<%=whatever%> />
これは個人的な判断か何かかもしれませんが、私は確かに後の方に投票します<!> quot; human <!> quot;読みやすい。 LINQ 2 XMLを使用すると、奇妙な<!> lt;%}%<!> gt;を取り除くことができます。それは私のaspxページをさまよいますが、同時に、あなたはそれらの<!> quot; good boys <!> quot;を作ります。不器用に見えます。
2番目にはパフォーマンスの問題が発生する場合があります。 LINQ 2 XMLの解析と実行は非常に遅いと思いますが、これに関するデータはありません。
個人的にはまだMVCフレームワークを実験していますが、ウィンドウ/ GUI-OOP指向のASPドットネットではなく、ほとんどすべてのインタラクティブな部分が明示的に処理されるため、ASPやPHP 3.Xのような昔に戻ったような気がしますフレームワーク。 MVCを使用する主な理由は、最高品質のクライアント側HTMLコードを保証できるからだと思います。
他のヒント
これは素晴らしいアイデアです!唯一の問題は、C#の使用です。 ;)VB.NETは、XMLリテラル機能を介してXMLを生成するためのサポートがはるかに優れています。
質問にリストするコードは、VB.NETでこのように書くことができます。 (テキスト <!> quot;これはリンク<!> quot; の追加により、例ではa
要素内にテキストが含まれていません。)
Dim root = <div class="root_item">
<img src=<%= ResolveUrl("~/image.gif") %> alt="This is an image"/>
<a class="link" href="http://google.com">This is a link</a>
</div>
<%= ... %>
タグはまだありますが、コンパイル時に有効性がチェックされます。このコードがXElement型を返す関数の戻り値になった場合、そのXhtmlスニペットはサイト内の別の場所で再利用できます。
httpで、VB.NET XMLリテラルをカスタムASP.NET MVCビューエンジンとして使用するCodePlexのプロジェクトがあります。 //vbmvc.codeplex.com 。 Dmitry Robsman 。MicrosoftのASP.NETのプロダクトユニットマネージャーです。ビューはVB.NETクラスであり、マスターページは基本クラスです。名前文字列で参照するのではなく、部分的にビュークラスを新規するため、追加のコンパイル時チェックでもあります。文字列を返すHtmlHelperクラスの代わりに、XElementを返し、提案したものと同様に機能するXhtmlHelperクラスがあります。