You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ViewBag将列表值传入ASP.NET Core分部视图?

实现步骤

1. 修改PostController的Index方法

在Index方法中,除了获取所有文章,同时把5篇最高浏览量的文章存入ViewBag:

public IActionResult Index()
{
    var allPosts = uow._post.GetAll().ToList();
    // 将热门文章数据存入ViewBag
    ViewBag.MostViewedPosts = uow._post.GetMostViewedPost(5).ToList();
    return View(allPosts);
}

2. 创建分部视图

在Views/Post文件夹下新建名为_MostViewedPosts.cshtml的分部视图,代码如下:

@using FA.JustBlog.Core.Models;
@model IList<Post>

<div class="col-md-3">
    <h3 class="mb-4">浏览量最高的文章</h3>
    <div class="list-group">
        @foreach (var post in Model)
        {
            <a href="@Url.Action("Details", "Post", new { id = post.Id })" class="list-group-item list-group-item-action">
                <h5 class="mb-1">@post.Title</h5>
                <p class="mb-1 small">浏览量: @post.ViewCount</p>
            </a>
        }
    </div>
</div>

可根据实际UI需求调整HTML结构和样式,比如修改卡片样式、显示字段等。

3. 在Index视图中引用分部视图

修改Index.cshtml,调整页面布局为两栏结构,并渲染分部视图:

@using FA.JustBlog.Core.Models;
@model IList<Post>; 

<div class="row gx-4 g-lg-5 justify-content-center">
    <!-- 主内容区:所有文章列表 -->
    <div class="col-md-9">
        <!-- Post preview-->
        @foreach(var item in Model)
        {
            <div class="post-preview">
                <a href="@Url.Action("Details", "Post", new {id = item.Id })">
                    <h2 class="post-title">@item.Title</h2>
                    <h3 class="post-subtitle">@item.ShortDescription</h3>
                </a>
                <p class="post-meta">
                    Posted by
                    <a href="@Url.Action("Details", "Post", new {id = item.Id })">JustBlog</a>
                    on @item.PostedOn
                </p>
            </div>
            <!-- Divider-->
            <hr class="my-4" />
        }
        <!-- Pager-->
        <div class="d-flex justify-content-end mb-4"><a class="btn btn-primary text-uppercase" href="#!">Older Posts →</a></div>
    </div>
    <!-- 侧边栏:热门文章分部视图 -->
    @if (ViewBag.MostViewedPosts != null && ViewBag.MostViewedPosts.Any())
    {
        @Html.Partial("_MostViewedPosts", ViewBag.MostViewedPosts)
    }
</div>

通过@Html.Partial传递ViewBag中的数据给分部视图,添加空值判断避免数据为空时出现错误。

备选方案:使用独立Action渲染分部视图

如果希望通过独立Action加载热门文章,可保留原GetMostViewedPost方法,直接在Index视图中调用:

<!-- 在Index视图合适位置添加 -->
@Html.Action("GetMostViewedPost")

这种方式会触发服务器端调用该Action并返回分部视图内容。

内容的提问来源于stack exchange,提问作者sos.call.112

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:52:40