Comment puis-je appeler une action de contrôleur lors du rendu d'une vue partielle?

Je suis entrain de créer une vue partielle pour une barre latérale qui affiche les messages les plus populaires dans mon site. Comment puis-je créer un contrôleur séparé pour le chargement du modèle requis par la vue partielle? (Le IEnumerable<Post> avec le populaire postes)

Actuellement, j'ai créé une classe contrôleur qui se charge de la populaire postes, mais je continue à recevoir des erreurs lors du rendu de l'partielle comme je ne peux pas appeler le contrôleur de charge et de la partielle du modèle. Par exemple, si je l'appelle à partir d'un point de vue où j'ai rendu un seul poste, le type de modèle ne correspond pas (Post vs IEnumerable<Post>)

C'est mon SidebarController:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using GoBaron.Front.Models;

namespace GoBaron.Front.Controllers
{
    public class SidebarController : Controller
    {
        private readonly ApplicationDbContext _context;

        public SidebarController(ApplicationDbContext context)
        {
            _context = context;
        }

        public async Task<IActionResult> PopularPosts()
        {
            return PartialView(await _context.Posts
                .Where(p => p.IsActive == true)
                .OrderByDescending(p => p.Id)
                .Take(5)
                .ToListAsync());
        }
    }
}

Et c'est ma vue partielle PopularPosts.cshtml:

@model IEnumerable<GoBaron.Front.Models.Post>
@using GoBaron.Front.Data.Extensions

@if (Model.Any())
{
    <div class="sidebar-item" id="topTrending">
        <header class="sidebar-item__header">
            <h1>Najpopularniejsze</h1>
        </header>
        <div class="sidebar-item__content">
            @foreach (var item in Model)
            {
                <a asp-controller="Post" asp-action="Details" asp-route-id="@item.Id" asp-route-slug="@item.Title.ConvertToSlug()" title="@item.Title">
                    <div class="sidebar-post-item" style="background-image:url('@item.PosterUrl')">
                        <span class="sidebar-post-item__counter">+5</span>
                        <span class="sidebar-post-item__title">@item.Title</span>
                    </div>
                </a>
            }
        </div>
    </div>
}

Quand je veux, dont le populaire postes de barre latérale, par exemple dans la mise en page, je viens de rajouter:

@await Html.PartialAsync("~/Views/Sidebar/PopularPosts.cshtml")

OriginalL'auteur Delavor | 2017-03-16