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.
@Html.Partial("~/Views/ControllerB/Index.cshtml")
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");
@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>
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");