在没有控制器的情况下将数据传递给 Layout Razor Pages

Passing data to Layout Razor Pages without controller

我想在我的布局页面中可视化我的模型中的数据 - 特别是当用户将商品添加到购物车时我想计算购物车中的商品数量并将其显示在旁边的导航栏中购物车的图像。

用户可以从超过 1 个页面添加产品(例如从索引页面或 Product/index 页面等)。

有人处理过类似的事情吗?

我希望我的导航栏看起来像这样:

导航栏

<div class="navbar-collapse collapse show" id="navbarColor01" style="">
    <ul class="navbar-nav mr-auto">
        <li class="nav-item active">
            <a asp-page="/Index" class="nav-link" >Home <span class="sr-only">(current)</span></a>
        </li>
        <li>
            <a asp-page="/ShoppingCart/Index"> <i class="fas fa-shopping-cart fa-1x fa-cog "></i></a>
<div class="badge badge-danger badge-pill">5</div> //here is the number to be displayed
        </li>
    </ul>
</div>

有不同的方法可以实现这一点,评估您的选择然后决定做什么。

您可以通过以下方式实现:

  1. 使用视图包。这会导致整个项目的代码声誉。因为你要为每个页面访问设置视图包。
  2. 使用局部视图。通过调用 Ajax 请求到操作,然后 return 局部视图。部分视图通常旨在成为 Controller/Page 的一部分,这没有意义 GetCart 来自不同的 controller/page。也最好避免查看声誉。
  3. 查看组件。这通常是实现它的理想方式,因为您需要在幕后工作然后 return 值。 View Components 可以独立存在,这对 SoC 有好处。

我个人的建议是 View Component,它是 asp.net 核心中的一项新功能(取代 ChildAction)。