2013-03-10 9 views
10

新しい子エンティティを作成する目的で、私が作成するパーシャルビューは空白なので、私は尋ねています。部分的な視点から親モデルにアクセスするために、汚れていても、素早く、必要があります。私は親のIDが必要です。パーシャルビューからのアクセスモデル

部分ビューは自動的に親のモデルにアクセスできますか?

+0

あなたの質問は不明です。 –

+0

いくつかのコードを投稿して、あなたが望んでいないものを理解するのに役立つでしょうか? –

答えて

10

レンダリング時にパラメータとしてこの部分に値を渡さない限り、部分モデルから親モデルにアクセスすることはできません。たとえば、あなたのメインビューで:

@model MyViewModel 
... 
@Html.Partial("_myPartial", new ViewDataDictionary(new { id = Model.Id })); 

、その後、あなたの部分の内側にあなたがIdにアクセスできます。

<div>@ViewBag.Id</div> 

もちろんこれは、部分的なビューにデータを渡すのはかなりお粗末な方法です。正しい方法は、厳密に型指定されたビューモデルを使用することです。

+0

この例が間違っているのだろうかと思います。私はViewDataDictionaryを渡すメインビューを見るが、ViewBag経由で部分ビューを取得している。 ViewBagとViewDataは異なる、はい? –

+3

いいえ、ViewBagとViewDataは全く同じストレージを使用しています。 'ViewBag.FooBar'を書くときは' ViewData ["FooBar"] 'と書いているようです。そして、あなたはそれらのいずれかを使用すべきではありません。代わりに強く型付けされたビュー・モデルを使用する必要があります。 –

+0

これを行う正しい方法は、プレゼンテーション要件をコントローラロジックに移し、リストアイテムをリストの一部に表示するために、親アイテムのIDを使用することですリンクの作成に使用されますか? MVCは錯覚ですか? – john

2

私はこれが古い話題だと知っていますが、とにかく同じ問題に自分の解決策を追加するだけだと思いました。私はそれが少しきれいだと思う。

基本的に、パーシャルビューにモデルを追加します。

封入ビュー:

@model whatever 
... 
@Html.Partial("partialview", anotherwhatever) 

部分図:私はちょうど(ちょうど短くするためにそれを使用して、パーティションコード)部分ビューに文字列を渡すために必要な私の場合は

@model anotherwhatever 
<div>@Model.something</div> 
... 

したがって、これは他のソリューションよりもはるかにエレガントでした。

まず最初に他のソリューションを試してみましたが、実際には動作させることができませんでした。

+0

パーフェクト:)ありがとう – Kaken

0

これは私のために働いてしまった。

@model MyViewModel 
... 
@Html.Partial("_myPartial", new ViewDataDictionary { { "id", Model.Id } }) 

そして、部分図の内側には、これを使用...

<div>@ViewBag.id</div> 
関連する問題