1

私は、私が見つけた非常にクリーンなテクニックを採用しようとしています。

以前は、パーシャルの中にループがありました。パーシャル内のモードをループしていました... しかし、ループがメイン ページに存在する例に出くわしましたがforeach、パーシャルは単なるループの肉でした。

彼らは次のようにそれを達成しました:

<% int index = 1; // iteration
foreach (var item in Model.Deal) { %>

     <% Html.RenderPartial("DealList", item, new ViewDataDictionary {{ "index", index }}); %>

<% i++; // increase the interation
} %>

しかし、私の例では、ViewModel を使用しています。今はパーシャルになっているため、以前のように「アイテム」にアクセスできません。代わりに、私の唯一の選択肢はModel.Deal...

RenderParialと言ってアクセスできない場合、ヘルパーで「アイテム」を渡すポイントは何item.StoreNameですか? View と Partial の両方が同じ ViewDataModel に厳密に型指定されていることに注意してください。

4

2 に答える 2

2

部分的な「DealList」の内部では、モデルはitemメイン ビューにあるものになります。部分ビューの内部では、 (メイン ビューから)内部のオブジェクトをModel.Deal参照します。Dealitem

これは、部分ビュー内でStoreNameプロパティにアクセスできることを意味します。Model.StoreName

補足として、ループを必要としないように、複数の部分ビューのレンダリングを処理する拡張メソッドをまとめました。

新しいメソッドは次のように呼び出されRenderPartialsます。

public static void RenderPartials(this HtmlHelper helper, string partialViewName, IEnumerable models, string htmlFormat)
        {
            foreach (var view in models.Select(model =&gt; helper.Partial(partialViewName,model)))
            {
                helper.ViewContext.HttpContext.Response.Output.Write(htmlFormat, view.ToHtmlString());
            }
        }

この方法を使用すると、次のように簡単に言うことができます。

<% Html.RenderPartials("DealList",Model.Deal); %>

ループなしで、メインビュー内。

htmlFormat パラメーターなどについて詳しく説明している、これに関する詳細情報がいくつかあります。

これがお役に立てば幸いです。

于 2011-01-03T20:18:52.427 に答える
0
@model IEnumerable<dynamic>

@foreach (dynamic m in Model)
{
     @Html.Partial(MVC.Lists.Messages.Views._SingleMessage, (object)m)
}
于 2013-05-17T21:01:19.243 に答える