Визуализировать частичный вид с другого контроллера - PullRequest
62 голосов
/ 01 ноября 2011

Есть ли способ визуализировать в моем представлении контроллера A частичное представление с другого контроллера B ?

Редактировать: я написал частичное представление, которое подходит только для двух контроллеров, и я не хочу копировать его в обе папки Views.
Я хочу, чтобы частичное представление отображалось каждый раз, когда представление отображается не после того, как что-то произошло.

Ответы [ 5 ]

77 голосов
/ 01 ноября 2011
  1. Вы можете обмениваться представлениями между контроллерами, помещая их в папку Views / Shared.Каждый контроллер может затем визуализировать это представление по имени.
  2. Вы можете визуализировать частичное представление (которое может быть совместно использовано контроллерами, как в (1)) в текущем представлении, используя Html.Partial().
  3. Вы можете использовать Html.Action(), чтобы вызвать действие на другом контроллере и отобразить результаты в текущем представлении.
  4. Вы можете использовать AJAX для загрузки частичного представления из другого контроллера после визуализации страницы.
44 голосов
/ 12 марта 2013
@Html.Partial("~/Views/ControllerB/Index.cshtml")
17 голосов
/ 01 ноября 2011

Да,

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

Вам просто нужно проработать часть пути.

В качестве альтернативы вы можете поместить частичное представление в представления / общий доступ, а затем просто вернуть:

return PartialView("view.cshtml");
2 голосов
/ 01 ноября 2011
@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>
1 голос
/ 25 февраля 2015

Просто примечание, так как я нашел эту ветку в поисках того же вопроса, но ответы не работали: в модулях Orchard CMS вы не можете использовать аккуратное решение , опубликованное Pittfall, вы должны использовать относительное пути для возврата частичных просмотров. Допустим, у вас есть контроллер

Controllers/SiteController.cs

и вы хотите вернуть частичное представление

Shared/MessageList/Items

тогда в ваших методах действия нужно написать

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