web-dev-qa-db-ja.com

別のコントローラー(および別のフォルダー)からのビューをRenderPartial

2つのデータベースエンティティを表す必要があり、それらを1つのページに出力する必要があります。

私はこのようなものを持っています

ビューDefビューAビューBテストビューC

ViewCに、ViewBを表示するViewAを表示させたい。

今私はこのようなものを使っています:

// View C
<!-- bla -->
<% Html.RenderPartial(Url.Content("../Definition/DefinitionDetails"), i); %>


// View A
<!-- bla -->
<% Html.RenderPartial(Url.Content("../Definition/DefinitionEditActions")); %>

これを行う方が良いですか?相対パス名でリンクすると、やけどをする可能性があることがわかりました。任意のヒント?

万が一私が何かを作ることができる...

Html.RenderPartial( "Definition"、 "DefinitionDetails"、i); ?

助けてくれてありがとう

26
George Silva

これは私にとってはうまくいきます!

@Html.Partial("~/Views/NewsFeeds/NewsFeedPartial.cshtml")

次のように、フルパスでビューを参照できます。

Html.RenderPartial("~/Views/Definition/DefinitionDetails")

さらに良いのは、 T4MVCライブラリ を使用することです。これにより、上記が実行され、(準)強く型付けされます。任意のコントローラーまたはビューから任意のビューを参照できます。次のように使用します。

Html.RenderPartial(MVC.Definition.Views.DefinitionDetails)

または

Html.RenderPartial(MVC.Definition.Views.DefinitionDetails, myModel)
34
Matt Sherman

正確に機能するオプションを明確にするために:

1)ビューファイルの拡張子is必須パスを指定した場合

2)パスを指定しない場合は、拡張子を指定しないでください。

以下の例では、cshtmlファイルを想定しています。

コードブロックでRenderPartialを使用します。

// This looks in default view folder, then shared, checking for .aspx, .cshtml etc
Html.RenderPartial("DefinitionDetails"); 

// This looks in specified path and requires the extension
Html.RenderPartial("~/Views/Definition/DefinitionDetails.cshtml");

インラインRazor構文にはPartialを使用します。

// This looks in default view folder, then shared, checking for .aspx, .cshtml etc
@Html.Partial("DefinitionDetails")

// This looks in specified path and requires the extension
@Html.Partial("~/Views/Definition/DefinitionDetails.cshtml")

注:どうやらRenderPartialPartialよりも少し高速ですが、完全にパスされた名前の方がMVCでファイルを検索するよりも高速であることも期待しています。

ループでパーシャルを作成している場合(つまり、ビューモデルのコレクションから)、特定のビューモデルをパススルーする必要がある可能性があります。

例えば.

   @foreach (var group in orderedGroups)
   {
       Html.RenderPartial("~/Views/ControllerName/ViewName.cshtml", group);
   }

私はプロジェクトでこれらすべてを行う必要があり、マークされた回答が少し誤解を招くのを見つけました。

10
Gone Coding

パーシャルを共有フォルダにコピーできませんでしたか?

<% Html.RenderPartial("DefinitionDetails", i); %>および

<% Html.RenderPartial("DefinitionEditActions"); %>

1
ridecar2