2011-11-01 25 views
61

コントローラのビュー内でレンダリングする方法がありますBレンダリング他のコントローラから部分ビュー

編集:私は、2つのコントローラだけに適した部分的なビューを作成し、両方のビューフォルダにコピーしたくありません。
私は何かが起こった後ではなく、ビューがレンダリングされるたびに部分ビューが表示されるようにします。

+1

を記述する必要がアクションメソッドで、その後部分図に

Shared/MessageList/Items 

を返すようにしたいとしましょう。ビュー(コントローラAで生成されたモデル)を再利用したいだけですか?ビューを生成するコントローラアクションを呼び出そうとしていますか?ページがレンダリングされた後、AJAXを使用してビューを動的にロードしたいですか? – tvanfosson

+0

あなたはもっと具体的になりますか?正確に何を達成したいのですか? –

+1

@ Html.Action( "YourPartialViewAction"、 "ControllerName"、new {id = Model.id}) –

答えて

75
  1. はあなたが閲覧/共有フォルダにそれらを置くことによって、コントローラ間の見解を共有することができます。

    代わりにあなただけ返し、共有ビューでの部分図を/置くことができます。各コントローラは、そのビューを名前でレンダリングできます。

  2. Html.Partial()を使用して、現在のビュー内の部分ビュー((1)のようにコントローラ間で共有することができます)をレンダリングできます。
  3. Html.Action()を使用すると、別のコントローラでアクションを呼び出して、現在のビュー内で結果をレンダリングできます。
  4. AJAXを使用して、ページがレンダリングされた後に別のコントローラから部分ビューを読み込むことができます。ただ、サイドノート
+0

オプション3について:コントローラを呼び出して、他のコントローラから部分的なビューをレンダリングできますか?相対パスを使用せずにありがとう! – gdoron

+0

@gdoron部分的なビューを生成するコードを1つまたは他のコントローラにローカライズし、両方のコントローラのビューに 'Html.Action()'を介して含めることができます。 – tvanfosson

+5

5.完全なパスを@ Html.Partial( "〜/ Views/Partials/Location.cshtml"、Model) –

17

はい、

return PartialView("/path/view.cshtml"); 

は、あなただけのパス部分をうまくする必要があります。

return PartialView("view.cshtml"); 
+1

私はpartialviewを共有したくありません。相対パスはmvcルーティングシステムにはあまり適していません。その他の提案? – gdoron

+0

ここにはちょっと疑問があります。 PartialViewメソッドは、HTMLエンコードされた文字列または生のHTMLを返しますか? – Karan

1
@model YourModelNamesapce.ModelName 
@{ 
    ViewBag.Title = "Edit"; 
    Layout = "~/Views/Shared/_LayoutForPartialViews.cshtml"; 
} 
<table> 
    <tr> 
     <td> 
      @Html.LabelFor(model => model.fieldname) 
     </td> 
     <td> 
      @Html.DisplayFor(model => model.fieldname) 
     </td> 
    </tr> 
    <tr> 
     <td>@Html.Action("PartialViewAction", "Controller", new { id = Model.id })</td> 
    </tr> 
</table> 
+0

申し訳ありませんが、これは私の質問にどう答えているのですか? – gdoron

+0

ゴードン、私は私の答えを更新しました –

+1

これは非常に明確な答えではありませんが、HariはDisplayForが良い選択肢であることを指摘しています。 – mcfea

44
@Html.Partial("~/Views/ControllerB/Index.cshtml") 
+3

最も簡単なソリューション。 :D – wooncherk

+0

ビューではなくコントローラでアクションを直接呼び出すことはできますか? – FrenkyB

1

私はこのスレッドが同じ質問を探したが答えは働いていなかった見られるように:あなたはPittfallによって投稿neat solutionを使用することはできませんオーチャードCMSモジュールでは、あなたは相対パスを使用する必要があります部分的なビューを返す。あなたは、コントローラ

Controllers/SiteController.cs 

を持っているし、あなたがこれは、いくつかの異なるものを意味するかもしれません

return PartialView("../Shared/MessageList/Items");