2017-09-18 1 views
0

Sur notre site Web, le client peut ajouter différents éléments dans les colonnes de pied de page, c'est-à-dire une zone de texte. Nous voulions pouvoir garder le code pour ces différents éléments dans une vue partielle, car les éléments sont utilisés dans d'autres parties du site et veulent minimiser la duplication de code.Vue partielle imbriquée

Je me demandais s'il était possible d'imbriquer une vue partielle dans une instruction foreach, puis de passer une instruction if basée sur le parent foreach.

J'ai le code suivant dans une vue partielle appelée Three_Column_Footer:

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage 
@{ 
     var root = Model.Content.Site(); 
     var thefooter = root.FirstChild("footer").Children(); 
    } 
    <footer class="footer color-main"> 
     <div class="container"> 
      <div class="row"> 
       @foreach(var foot in thefooter){ 
        var childcol = foot.Children; 
         <div class="col-6"> 
          @foreach(var item in childcol){ 
           @Html.Partial("Footers/FooterStubs", item) 
          } 
         </div> 
       } 
      </div> 
     </div> 
    </footer> 

J'ai besoin someway d'obtenir le foreach ci-dessus pour être reconnu dans les FooterStubs appelés partiels. Est-ce que ceci peut être fait avec un @inherits Umbraco.Web.Mvc.UmbracoViewPage<IPublishedContent> ou un Model.GetPropertyValue<IEnumerable<IPublishedContent>> - si oui comment?

Merci!

+0

Veuillez inclure le contenu de 'FooterStubs', en particulier les 6 premières lignes. – mjwills

+0

Il n'y a actuellement que cette ligne dans FooterStubs, comme c'est le peu qui me déroute: @inherits Umbraco.Web.Mvc.UmbracoViewPage

+0

donc vous avez deux vues partielles et vous voulez donner une référence de l'un dans l'autre? Vous avez deux PV (vue partielle) avec la référence l'un de l'autre signifie qu'ils s'appellent l'un l'autre ...? assez confus si ci-dessus est votre code pour 'Three_Column_Footer' –

Répondre

0

La méthode Partial a une surcharge qui accepte additionalViewData. Vous pouvez utiliser cela pour fournir un contexte supplémentaire dont vous avez besoin d'avoir la partie:

@Html.Partial("Footers/FooterStubs", item, new ViewDataDictionary(ViewData) 
{ 
    { "foot": foot } 
}); 

Puis dans votre partie:

@{ 
    var foot = ViewData["foot"] as YourFootClass; 
} 

Je ne suis pas sûr de ce que vous avez besoin d'informations réellement dans la partie, mais vous pouvez essentiellement ajouter ce que vous aimez de cette façon. Gardez à l'esprit que ViewData est un dictionnaire dynamique, vous devrez donc taper tout ce que vous en tirerez.