9
votes

Comment rendre partials d'un autre contrôleur

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>


0 commentaires

4 Réponses :


4
votes

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: xxx

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.


2 commentaires

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.





2
votes

Vous pouvez toujours utiliser "partiel" au cas où vous mettez votre vue dans le répertoire "partagé".

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 ...


0 commentaires