ビューを呼び出すコントローラーがあります。ビューには、次のように挿入された部分ビューがあります。
@{ Html.RenderPartial("PartialViewName", this.Model);}
これはうまくいきます。
しかし、コントローラーでは、部分ビューで使用する ViewData または ViewBag に何かを入れたいと考えています。これどうやってするの?
ビューを呼び出すコントローラーがあります。ビューには、次のように挿入された部分ビューがあります。
@{ Html.RenderPartial("PartialViewName", this.Model);}
これはうまくいきます。
しかし、コントローラーでは、部分ビューで使用する ViewData または ViewBag に何かを入れたいと考えています。これどうやってするの?
これでうまくいくはずです。ビュー バッグとビュー データは、アクション メソッドの存続期間全体で使用できるため、ビューを取得するコントローラー メソッドでビュー データにアイテムを追加すると、そのビューでレンダリングされる後続のパーシャルはビュー データにアクセスできます。 . 部分ビューのビュー データから値を取得するための構文は非常に簡単です。例:
@{
var variable = ViewData["My Key"];
}
Html.Partial と Html.RenderPartial の両方に、ViewDataDictionary を受け入れるオーバーロードがあります。新しいものを構築するか、単に既存のものを渡すことができます。
@{ Html.RenderPartial("_MyPartial", Model.Property, new ViewDataDictionary { ... });}
また
@{ Html.RenderPartial("_MyPartial", Model.Property, ViewData);}
ViewBag は、パラメーターを渡す必要なくパーシャルにアクセスできると確信しています。
編集:
ViewBag と ViewData は、パーシャルとエディター/表示テンプレートの両方で確実に利用できます。従属ビューが次のようにアクセスする前に、ビューでそれらを編集できます。
@{ ViewBag.MyNewValue = "..."; }
@Html.Partial("_MyPartial", Model)
次に、パーシャルで:
@{ string myString = ViewBag.MyNewValue; }
他の人が言ったように、アクション メソッドで ViewBag 値を割り当てている限り、部分ビューでアクセスできるはずです。
また、次のように部分ブロックをレンダリングできるはずです。
@Html.Partial("PartialViewName", Model)
これの代わりに
@{ Html.RenderPartial("PartialViewName", this.Model);}.
最も簡単な方法でそれを行うことができます。
Viewbag.sth = value;
コントローラーにセットするだけ。
そしてあなたの部分的な使用で@ViewBag.sth