Render Partial View from other controller

C#asp.net Mvcasp.net Mvc-3RazorPartial Views

C# Problem Overview


Is there a way to render inside my view of controller A a partial view from other controller B?

Edit: I wrote a partial view that is good for only two controllers and I don't want to copy it to their both Views folder.
I want The partial view to be displayed each time the View is rendered not after something happens.

C# Solutions


Solution 1 - C#

  1. You can share views between controllers by putting them into the Views/Shared folder. Each controller can then render that view by name.
  2. You can render a partial view (which can be shared between controllers as in (1)) within the current view using Html.Partial().
  3. You can use Html.Action() to invoke an action on a different controller and render the results within the current view.
  4. You can use AJAX to load a partial view from a different controller after the page has been rendered.

Solution 2 - C#

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

Solution 3 - C#

Yes,

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

You just need to work out the path part.

Alternatively you can put the partial view in views/shared then just return :

return PartialView("view.cshtml");

Solution 4 - C#

@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>

Solution 5 - C#

Just a side note as i found this thread searching for the same question but the answers weren't working: in Orchard CMS modules you cannot use the neat solution posted by Pittfall, you have to use relative paths to return partial views. Lets say you have a controller

Controllers/SiteController.cs

and you want to return the partial view

Shared/MessageList/Items

then in your action methods you need to write

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questiongdoron is supporting MonicaView Question on Stackoverflow
Solution 1 - C#tvanfossonView Answer on Stackoverflow
Solution 2 - C#PittfallView Answer on Stackoverflow
Solution 3 - C#SteveView Answer on Stackoverflow
Solution 4 - C#Hari GillalaView Answer on Stackoverflow
Solution 5 - C#ViRuSTriNiTyView Answer on Stackoverflow