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.
Html.Partial()
.Html.Action()
pour appeler une action sur un autre contrôleur et restituer les résultats dans la vue actuelle.@Html.Partial("~/Views/ControllerB/Index.cshtml")
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");
@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>
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");