ProductImageを取得する厳密に型指定された部分ビューがあり、レンダリングされるときに、含まれているページで動的に作成する追加のViewDataも提供したいと思います。 RenderPartial呼び出しを使用して、強く型付けされたオブジェクトとカスタムViewDataの両方を部分ビューに渡すにはどうすればよいですか?
var index = 0;
foreach (var image in Model.Images.OrderBy(p => p.Order))
{
Html.RenderPartial("ProductImageForm", image); // < Pass 'index' to partial
index++;
}
RenderPartialは、単にViewDataDictionaryである別のパラメーターを取ります。あなたはほとんどそこにいるので、このように呼ぶだけです:
Html.RenderPartial(
"ProductImageForm",
image,
new ViewDataDictionary { { "index", index } }
);
これは、他のすべてのビューがデフォルトで持っているデフォルトのViewDataをオーバーライドすることに注意してください。 ViewDataに何かを追加する場合、部分ビューに渡すのはこの新しい辞書にはありません。
Wompが投稿したものを拡張するには、次のようにViewDataDictionary
のコンストラクターオーバーロードを使用する場合、既存のビューデータを保持しながらcan新しいビューデータを渡します。
Html.RenderPartial(
"ProductImageForm",
image,
new ViewDataDictionary(this.ViewData) { { "index", index } }
);
@Html.Partial("_Header", new ViewDataDictionary { { "HeaderName", "User Management" }, { "TitleName", "List Of Users" } })
or
@{Html.RenderPartial("_Header", new ViewDataDictionary { { "HeaderName", "User Management" }, { "TitleName", "List Of Users" } });}
部分ページ(_ヘッダー):
<div class="row titleBlock">
<h1>@ViewData["HeaderName"].ToString()</h1>
<h5>@ViewData["TitleName"].ToString()</h5>
</div>
私はこれが機能しないはずだと思いますか?
ViewData["currentIndex"] = index;
強く型付けされたクラスを含む別のクラスを作成します。
クラスに新しいものを追加して、ビューに返します。
次に、ビューで、新しいクラスを継承し、エラーになるコードのビットを変更します。つまり、フィールドへの参照です。
お役に立てれば。そうでない場合はお知らせください。特定のコードを投稿します。
追加データを渡す最も簡単な方法は、@ Joel Martinezが注記しているように、ビューの既存のViewDataにデータを追加することです。ただし、ViewDataを汚染したくない場合、RenderPartialには、表示する2つの引数バージョンだけでなく、3つの引数を取るメソッドがあります。 3番目の引数はViewDataDictionaryです。渡したい追加データのみを含むパーシャル用に、個別のViewDataDictionaryを構築できます。
これも動作するはずです。
this.ViewData.Add("index", index);
Html.RenderPartial(
"ProductImageForm",
image,
this.ViewData
);
動的変数ViewBagを使用できます
ViewBag.AnotherValue = valueToView;