Si j'ai un homécontrôleur affichant sa vue d'index, comment puis-je procéder pour que l'avis d'index a imbéci d'UserControl d'un autre contrôleur?
Voici un regard sur le contenu de la vue Home / Index: P >
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Import Namespace="Microsoft.Web.Mvc"%>
<asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server">
<%=Resources.Global.HomeTitle %>
</asp:Content>
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
<h2><%= Html.Encode(ViewData["Message"]) %></h2>
<p><%=Resources.Global.HomeIndex %></p>
<h3>Partial title</h3>
<% Html.RenderAction("SomeAction","OtherController"); %>
</asp:Content>
4 Réponses :
mettre des partiels utilisées par plus d'un contrôleur dans le dossier partagé.
Le modèle doit être transmis par la page. Constructez-le dans le contrôleur, pas dans la vue. Puis transmettez-le comme ceci: p> Notez que si modèle.someactionData est null, alors MVC passera le modèle au lieu de modèle.someactionData. Assurez-vous que votre code peut tolérer cela. P> p>
Vous voulez dire que je devrais dupliquer (ou hériter) la logique de construction modèle dans chaque contrôleur qui a imbécile la partielle commune? Je crois comprendre que je pouvais simplement passer un point de vue contenant les informations utilisées par cette partie partagée partielle à la vue Home / Index, mais cela signifie que je devrais construire / ajouter ces données à la vue de l'autre vue à l'aide de cette partie partielle ... Pour plus de sens pour moi s'il y avait un moyen de faire des partiels directement à partir d'un autre contrôleur dans lequel le modèle / mode de vue correspondant est mis en œuvre.
Non, vous ne devez jamais dupliquer le code. Parfois, vous avez besoin de le modulariser, cependant. La suggestion de Adrian fonctionne bien si cela ne vous dérange pas d'utiliser des contrats à terme; La suggestion que j'ai faite fonctionne si vous préférez l'éviter.
Utilisez la méthode html.renderaction à partir du ASP.NET MVC Futures A > Bibliothèque. p>
Cela fonctionne bien! Merci Monsieur. J'ai changé le <% html.renderpartial ("~ / vues / autrecontroller / somaction.ascx"); %> ligne par <% html.renderaction ("somaction", "autrecontrôleur"); %> et cela fonctionne de merveille, appelant l'autrecontrôleur et affichant les données correctes.
On dirait que vous devriez avoir le partage d'UserControl partagé dans une page principale (peut-être imbriquée) de sorte que la vue n'a pas besoin de savoir sur les contrôleurs autres que son parent. Stephen Walther a quelques bonnes stratégies pour réussir les données à
Vous pouvez toujours utiliser "partiel" au cas où vous mettez votre vue dans le répertoire "partagé". P>
Cette solution est très simple et maintenue au cas où vous avez des vues ou des commandes partagées, en espérant qu'elle est également une alternative et utile pour vous ... P>