2012-06-22 16 views
5

ビューを呼び出すコントローラがあります。ビューには次のように挿入された部分ビューがあります。ASP.NET MVC3の部分ビューでViewDataにアクセスできません

@{ Html.RenderPartial("PartialViewName", this.Model);} 

これは問題なく動作します。

しかし、コントローラーでは、私が部分ビューで使用するViewDataまたはViewBagに何かを入れたいと思っています。これどうやってするの?

+0

@Html.Partial("PartialViewName", Model) 

あなたが部分的にViewBagを使用したい、またはあなたにモデルとしてViewBagを使用部分? –

+0

パーシャルビューに渡すモデルで、消費する必要があるデータが定義されていないのはなぜですか? (その2番目のパラメータは結局のところです) –

+0

@Mateusz Rogulski私の一部にViewBagの価値を得たい – Victor

答えて

4

Html.PartialとHtml.RenderPartialの両方に、ViewDataDictionaryを受け入れるオーバーロードがあります。あなたは新しいものを作るか、単に既存のものを渡すことができます。

@{ Html.RenderPartial("_MyPartial", Model.Property, new ViewDataDictionary { ... });} 

または

@{ Html.RenderPartial("_MyPartial", Model.Property, ViewData);} 

私はかなり特定のViewBagだ任意のパラメータを渡す必要がなく、あなたの部分にアクセスすることができます。

EDIT:

ViewBagとViewDataをパーシャルと編集/表示テンプレートの両方に確実に利用できます。あなたの部分に続いて

@{ ViewBag.MyNewValue = "..."; } 
@Html.Partial("_MyPartial", Model) 

::従属ビューは、このようにそれらにアクセスする前に、あなたはあなたのビューでそれらを編集することができます

@{ string myString = ViewBag.MyNewValue; } 
2

あなたが最も単純な方法でそれを行うことができます。

コントローラーにViewbag.sth = value;と設定してください。

とあなたの部分的な使用で@ViewBag.sth

6

あなたはこのちょうど罰金を行うことができるはず。ビュー・バッグとビュー・データは、Actionメソッドの全期間使用可能です。そのため、ビューを取得するコントローラ・メソッド内のデータを表示する項目を追加すると、そのビューでレンダリングされる後続の部分データは、 。部分ビューでビューデータから値を取得する構文は非常に簡単です。例:

2

アクションメソッドでViewBag値を割り当てる限り、部分ビューでアクセスすることができます。

また、あなたがこのような部分ブロックをレンダリングすることができるはずです。代わりにこの

@{ Html.RenderPartial("PartialViewName", this.Model);}. 
関連する問題