2

ASP.NET MVCのビュー エンジンについては多くの議論があり、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);

ボタンを新しく作成して、別のコントロールのコントロール コレクションに追加できる、Web フォームの厳密に型指定されたコントロールに似ているので、私はそれが好きです。

これに明らかな問題や制限はありますか?

4

2 に答える 2

3

これは素晴らしいアイデアです!私が目にする唯一の問題は、C# の使用です。;) VB.NET は、XML リテラル機能を介して XML を生成するためのはるかに優れたサポートを備えています。

質問に記載されているコードは、VB.NET で次のように記述できます。(あなたの例には要素内にテキストが含まれていなかったため、「これはリンク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://vbmvc.codeplex.comでカスタム ASP.NET MVC ビュー エンジンとして VB.NET XML リテラルを使用する CodePlex のプロジェクトがあります。これは、Microsoft の ASP.NET のプロダクト ユニット マネージャーであるDmitry Robsmanによるコードに基づいています。ビューは VB.NET クラスで、マスター ページは基本クラスです。名前文字列で参照する代わりに、部分ビュー クラスを新規作成するため、これも追加のコンパイル時のチェックです。文字列を返す HtmlHelper クラスの代わりに、XElement を返し、提案したものと同様に機能する XhtmlHelper クラスがあります。

于 2009-05-22T18:40:49.183 に答える
1

上記の方法には2つの問題が考えられます。初め、

XElement iconImage = new XElement("img",
new XAttribute("src", ResolveUrl("~/image.gif")),
new XAttribute("alt", "This is an image"));

あなたが上で書いたことを参照すると、私たちは次のようなものを持つことができます:

<img src=<%=whatever%> alt=<%=whatever%> />

これは個人的な判断か何かかもしれませんが、私は確かに後者の方が「人間」が読める形式に投票します。そうです、LINQ 2 XMLを使用すると、私のaspxページをさまよっている奇妙な<%}%>を取り除くことができますが、同時に、それらの「いい子」は不器用に見えます。

2つ目は、パフォーマンスの問題が発生する可能性があります。LINQ 2 XMLの解析と実行はかなり遅いと思いますが、これに関するデータはありません。

個人的にはまだMVCフレームワークを実験していますが、ウィンドウ/GUI-OOP指向のASPDot Net Frameworkではなく、ほとんどすべてのインタラクティブな部分が明示的に処理されるため、ASPやPHP3.Xのような昔に戻ったような気がします。私がMVCを使用する主な理由は、最高品質のクライアント側HTMLコードを保証できるからだと思います。

于 2009-05-20T12:44:35.657 に答える