0

J'essaie d'appeler plusieurs vues partielles dans un seul contrôleur. J'ai un carrousel qui aura au moins 3 diapositives qui seront gérées par un CMS. Je veux être en mesure de faire une vue partielle pour chacune de ces diapositives et les appeler tous dans le contrôleur de la maison avec un tableau. Je sais que mon point de vue aura besoin de la boucle foreach, mais ai-je besoin d'un modèle séparé pour chacune de ces vues partielles ou est-ce qu'un seul modèle fonctionnera? J'ai regardé cette question et les réponses, mais je pense que c'est un peu différent de ce que je cherche (ASP.NET MVC - How to pass an Array to the view?) J'ai d'abord inclus la vue partielle. La vue, le modèle et le code du contrôleur. Je m'excuse à l'avance, le code est un gâchis. Toute aide serait appréciée. Je vous remercie.Appel de plusieurs vues partielles dans un contrôleur pour le système CMS

Partial View - @{ 
ViewData["Title"] = "_CorporateEvents"; 
} 

<div> 
@foreach (var image in Model) 
{ 
    <img width="850" height="700"> 
    <img source src="@image.EventImages.File.Url" type="image" 
     alt="Your browser does not support the image tag." /> 
} 

 View--<!-- Wrapper for slides --> 
    <div class="carousel-inner"> 
     <div class="item active"> 
     </div> 
     <div class="item"> 
     @Html.Partial("~/Views/Shared/_CorporateEvents.cshtml"); 
     </div> 




    Model---namespace MyLink.Models 
    { 
public class CorporateEvents 
{ 
    [JsonProperty("eventImages")] 
    public Asset EventImages { get; set; } 
} 
    } 





    Controller ----public async Task<IActionResult> Index() 
    { 

     var qb = QueryBuilder<CorporateEvents>.New.ContentTypeIs("corporateEvents"); 
     var entries = await _client.GetEntriesAsync(qb); 


      return View(entries); 
    } 
} 

}

Répondre

0

Donc en bref, ne vous n'avez pas besoin d'un modèle séparé pour une vue partielle. Vous pouvez tout simplement passer un modèle à chaque partie comme ceci:

@Html.Partial("~/Views/Shared/_CorporateEvents.cshtml", modelGoesHere);

Cependant, quelques choses me paraît étrange dans votre exemple.

Votre contrôleur saisit un certain nombre d'entrées de contentful et chaque entrée contient exactement un Asset. Sont-ils supposés être vos objets dans le carrousel?

Si donc je créerais une vue qui ressemble à ceci:

<div class="carousel-inner"> @foreach(var slide in Model) { @Html.Partial("~/Views/Shared/_CorporateEvents.cshtml", slide); } </div>

et la vue partielle quelque chose comme ceci:

<div class="item"> <img source src="@image.EventImages.File.Url" type="image" alt="Your browser does not support the image tag." /> </div>

Je vous suggère également d'utiliser la <contentful-image> taghelper au lieu d'une balise img pour tirer parti de l'API de l'image content. Vous pouvez ensuite remplacer votre vue partielle par quelque chose comme ceci:

<div class="item"> <contentful-image url="@image.EventImages.File.Url" width="850" height="700" alt="Your browser does not support the image tag." /> </div> Ajoutez juste @addTagHelper *, Contentful.AspNetCore à votre fichier _ViewImports.

Vous pouvez en savoir plus sur l'image taghelper et pourvues d'un contenu que d'autres options sont disponibles ici: https://www.contentful.com/developers/docs/net/tutorials/aspnet-core/