1

.aspxページ(またはMVCの場合はView)で作業していて、インラインコードのブロックがあるとします。

<p>Some HTML and content</p>

<% foreach (var x in foo) { %>
   <%= x.myProperty %>
<% } %>

<p>Moar HTMLz</p>

このモデルよりも効率的で面倒な方法でテキストをマークアップに抽出する方法はありますか?がたくさんあるよう<%です

編集私が本当に求めているのは、コードブロックを離れずに、コードブロックからページ上のテキストを取得し、コードブロックに再入力してから、囲んでいるコードブロックに再入力するより良い方法があるかどうかです。

4

2 に答える 2

3

<%%>セクションを少なくすることが厳密に目標である場合は、長い道のりで書き出すことができますが、それはほとんど改善されません。

<% foreach (var x in foo) {
       Response.Write(Html.Encode(x.MyProperty));
   } %>

aspxページから除外したいだけの場合は、コントロールに移動できます。

<% Html.RenderPartial("properties", foo); %>

この手法の利点の1つは、aspxページ(ビュー)の一般的な構造をそのまま維持しながら、パーシャルに別のビューエンジン(たとえば、NHaml)を利用できることです。

于 2009-12-23T01:48:31.760 に答える
2

列挙可能なコレクションの拡張メソッドを作成します。

public static void Each<T>(this IEnumerable<T> list, Action<T> fn)
{
          foreach (T item in list)
        fn(item);
}

そして、次のようにします。

foo.Each((i) => Response.Write(Html.Encode(x.MyProperty)));

または、さらに簡単にするために、カスタム ビュー ページ (MVC の場合) またはカスタム ページ クラス (Web フォームの場合) を使用します。

public void WriteText(string coreText)
{
    Response.Write(Html.Encode(coreText));
}

さらに簡単にするために。拡張メソッドは本当に役立ちます。

于 2009-12-23T02:24:32.857 に答える