web-dev-qa-db-ja.com

他のコントローラーからパーシャルビューをレンダリングする

コントローラーのビュー内でレンダリングする方法はありますか[〜#〜] a [〜#〜]他のコントローラーからの部分ビュー[〜#〜] b [〜#〜]

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

62
gdoron
  1. Views/Sharedフォルダーに配置することで、コントローラー間でビューを共有できます。各コントローラーは、そのビューを名前でレンダリングできます。
  2. Html.Partial()を使用して、現在のビュー内に部分的なビュー((1)のようにコントローラー間で共有できる)をレンダリングできます。
  3. Html.Action()を使用して、異なるコントローラーでアクションを呼び出し、現在のビュー内で結果をレンダリングできます。
  4. AJAX=を使用して、ページのレンダリング後に別のコントローラーから部分ビューをロードできます。
77
tvanfosson
@Html.Partial("~/Views/ControllerB/Index.cshtml")
44
Pittfall

はい、

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

あなただけのパス部分を解決する必要があります。

または、部分ビューをviews/sharedに配置してから戻るだけでもかまいません。

return PartialView("view.cshtml");
17
Steve
@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>
2
Hari Gillala

私はこのスレッドが同じ質問を検索しているのを見つけましたが、答えは機能していませんでした:オーチャードCMSモジュールでは、 ニートソリューション を使用できません部分ビューを返します。コントローラーがあるとしましょう

Controllers/SiteController.cs

そして、あなたは部分的なビューを返したい

Shared/MessageList/Items

その後、アクションメソッドで書く必要があります

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