2

ASP.NET MVC 4 用のページネーション リピーターを作成しました。これには、レンダリングするヘッダー、フッター、本文、および区切りセクションの引数を受け取る render メソッドがあります (読みやすくするために大幅に簡略化されています)。

public IHtmlString Render(Func<TViewModel, object> header, Func<TViewModel, object> body, Func<TViewModel, object> footer)
{
    var sb = new StringBuilder();
    // Code to render including calling the parameter objects, something like this:
    sb.Append(header(null));
    foreach (var item in items)
        sb.Append(body(item));
    sb.Append(footer(null));

    return new HtmlString(sb.ToString());
}

ここで、このメソッドを Razor テンプレートで使用し、実際のテンプレート パーツをパラメーターとして含めたいと考えています。これは、純粋なラムダ式またはワンライナーのみをテンプレートとして使用する、次のようなシナリオでうまく機能します。

@Model.Render(body:
    item => Html.Partial("InvoiceListView", item)
, separator:
    @<hr />
)

ただし、テーブルを構築してデータを入力するなど、より複雑なことをしたい場合は、これらの複数行のテンプレートをパラメーターとして送信したいことを Razor に認識させることができません。

私はおそらくこれがうまくいくと思いました:

@Model.Render(body: item => 
    @<text>
        <tr>
            <td>
                @item.ArticleNr
            </td>
        </tr>
    </text>
);

しかし、そこには運がありません。誰にも何か提案がありますか?それとも、私は運が悪かったのですか? Razor でこのようなリピーターを作成することは不可能ですか?

4

1 に答える 1

1

この記事をご覧ください:

http://haacked.com/archive/2011/02/27/templated-razor-delegates.aspx

それが役に立てば幸い!

編集:

ラムダ式を直接使用する代わりに、ラッパーを使用できます

@helper Foo(object item)
{
    <tr>
        ...
    </tr>
}

@Model.Render(body: Foo)
于 2013-03-26T23:35:14.803 に答える