web-dev-qa-db-fra.com

Rendre une vue partielle à partir d'un autre contrôleur

Existe-t-il un moyen de rendre ma vue du contrôleur A une vue partielle depuis un autre contrôleur B ?

Edit: J'ai écrit une vue partielle qui convient à deux contrôleurs uniquement et je ne veux pas la copier dans leur dossier Views.
Je souhaite que la vue partielle soit affichée chaque fois que la vue est rendue, et non après un événement.

62
gdoron
  1. Vous pouvez partager des vues entre contrôleurs en les plaçant dans le dossier Views/Shared. Chaque contrôleur peut ensuite rendre cette vue par nom.
  2. Vous pouvez rendre une vue partielle (pouvant être partagée entre les contrôleurs comme dans (1)) dans la vue actuelle à l'aide de Html.Partial().
  3. Vous pouvez utiliser Html.Action() pour appeler une action sur un autre contrôleur et restituer les résultats dans la vue actuelle.
  4. Vous pouvez utiliser AJAX pour charger une vue partielle à partir d'un autre contrôleur après le rendu de la page.
77
tvanfosson
@Html.Partial("~/Views/ControllerB/Index.cshtml")
44
Pittfall

Oui,

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

Vous avez juste besoin de travailler sur la partie chemin.

Sinon, vous pouvez mettre la vue partielle en vues/shared puis simplement retourner:

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

Juste une note latérale car j'ai trouvé ce fil à la recherche de la même question, mais les réponses ne fonctionnaient pas: dans les modules Orchard CMS, vous ne pouvez pas utiliser le solution soignée posté par Pittfall, vous devez utiliser des chemins relatifs à retourner des vues partielles. Disons que vous avez un contrôleur

Controllers/SiteController.cs

et vous voulez retourner la vue partielle

Shared/MessageList/Items

alors dans vos méthodes d'action, vous devez écrire

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