我正在爲側邊欄創建部分視圖,該視圖將顯示我網站中最受歡迎的帖子。我如何創建一個單獨的控制器來加載部分視圖所需的模型? (IEnumerable<Post>
與熱門帖子)具有局部視圖的ASP.NET核心控制器
目前我已經創建了一個控制器類加載流行的帖子,但我不斷收到錯誤時呈現部分,因爲我不能調用控制器和加載部分模型。例如,如果我把它從我呈現一個立柱的觀點,模型類型不匹配(Post
VS IEnumerable<Post>
)
這是我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());
}
}
}
這是我的部分鑑於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>
}
當我想包括熱門的帖子邊欄,例如在佈局,我只需要添加:
@await Html.PartialAsync("~/Views/Sidebar/PopularPosts.cshtml")
我想做一個web api調用來獲取數據並將其顯示在網頁的一部分中,但我不希望這會延遲加載頁面的其餘部分。這種使用invokeasync的視圖組件的解決方案是否實現了這一點?或者,我唯一的解決方案就是使用某種Javascript,比如React.js? – Primico