2012-02-22 20 views
2

私はいくつかのパラメータ(いくつかの文字列)をページから、メインページにレンダリングされる部分的なビューに渡そうとしています。これを行うために、私はRuntimeBinderExceptionを与え続けている匿名型のオブジェクトを渡しています。私が試したことを考えれば、私はエラーに驚くことはありませんが、他に何を試していいのか分かりません。部分ビューに渡された匿名型オブジェクトにアクセスするにはどうすればよいですか?

ビュー\ホーム\ PageWithPartialView.cshtml

@Html.Partial("DynamicPartialView", new { paramFromPageToPartialView = "value" }) 

部分図はこれを行う方法はない場合ビューは

@model dynamic // Doesn't make a difference 

@{ 
    // This is where I need to access and display the parameters 
    // passed from the main page 

    // Throws RuntimeBinderException 
    // Cannot apply indexing with [] to an expression of type 'object' 
    var try1 = Model["paramFromPageToPartialView"]; 

    // Throws RuntimeBinderException 
    // 'object' does not contain a definition for 'paramFromPageToPartialView' 
    var try2 = Model.paramFromPageToPartialView; 
} 

共有\ DynamicPartialView.cshtmlを\、私は」 mオープン。部分的なビューには数百行のコードが生成されるので、カスタムHtmlHelpersは私にとっては扱いにくいようです。

+1

2つのコードは同じアセンブリ内にありますか? –

+0

私はそう思います...最初はViews \ Home \にあり、もう1つはViews \ Shared \にあります。例外はパーシャルビューで発生します。 –

+0

彼らはどちらも同じプロジェクトに入っていますか?うーん。彼らが異なった集会にいたなら、私はそれを理解することができた。私はMVCの人ではありません...彼らは "早期に"コンパイルさせるためにあなたができることは何ですか? (私はライフサイクルがMVCにあるかどうかわかりません)そうすれば、彼らは本当に同じアセンブリにいるのでしょう。 –

答えて

3

ViewBagは、この種の問題を解決するために設計されています。むしろ、モデルからのあなたの部分でparamFromPageToPartialViewを消費するよりも、ViewBagからそれを消費する:

@{ViewBag.paramFromPageToPartialView = "value";} 
@Html.Partial("DynamicPartialView") 

ビュー\共有\ DynamicPartialView.cshtml

@model dynamic // Doesn't make a difference 

@{ 
    var try3 = ViewBag.paramFromPageToPartialView; 
} 
ホーム\ PageWithPartialView.cshtml \

ビュー

+0

ビンゴ!私は何かが欠けていたと確信していた...ありがとう! –

+0

これは私の現在の状況で、少しずつ異なるタイプの部分的なビューを繰り返しレンダリングしており、基礎となるクラスをリファクタリングできないという状況に役立ちました。私は[究極的には反映しました](http://stackoverflow.com/a/31306368/957950)、他のチームが.NET MVCを十分に知っていればこれを使用していました。 – brichins

関連する問題