【问题标题】:How do I access the shopping cart directly from a controller action?如何直接从控制器操作访问购物车?
【发布时间】:2020-06-29 01:36:52
【问题描述】:

关于 ASP.NET Core 的最受欢迎的书籍之一是 Adam Freeman 的“Pro ASP.NET Core 3”。

在第 7-11 章中,他构建了一个示例应用程序 SportsStore。

注意右上角的购物车信息:

这通过以下行显示在布局中:

<vc:navigation-menu />

参见Views/Shared/_Layout.cshtml 第 22 行。

视图的实现在:

Views/Shared/Components/CartSummary/Default.cshtml

以及 C# 代码在:

Components/CartSummaryViewComponent.cs

我知道购物车数据的持久性是通过Startup.cs 中的以下行设置的:

services.AddScoped<Cart>(obj => SessionCart.GetCart(obj));

有关SessionCart 的详细信息,请参阅Models/SessionCart.cs

现在回答问题。

我在HomeController中添加了以下方法:

    [HttpGet]
    public ContentResult CartSize()
    {
        return new ContentResult()
        {
            ContentType = "text/html",
            StatusCode = (int)HttpStatusCode.OK,
            Content = "cart size here"
        };
    }

这是一个非常简单的操作方法,旨在简单地返回购物车中的商品数量。

鉴于示例项目中购物车的实现方式,在CartSize 方法中获取购物车中商品数量的好方法是什么?

谢谢!

【问题讨论】:

    标签: asp.net-core asp.net-core-mvc asp.net-core-3.1


    【解决方案1】:

    将 Cart 服务注入您的控制器并在您的操作方法中使用

      private Cart cart; 
    
      public MyController(Cart cartService) {
    
      cart = cartService;
      }
    
      [HttpGet]
      public ContentResult CartSize()
      {
            return new ContentResult()
            {
                ContentType = "text/html",
                StatusCode = (int)HttpStatusCode.OK,
                Content = cart.Lines.Count().ToString()
            };
       }
    

    【讨论】:

    • 我没有意识到访问购物车就像在控制器构造函数中添加 Cart 的参数一样简单。这让我想知道,谁负责传递这个Cart 实例?好像是 ASP.NET Core 自动完成的? IE。它只是注意到 Cart 是预期的,然后通过了?我猜它知道这样做是因为Startup.cs:services.AddScoped&lt;Cart&gt;(obj =&gt; SessionCart.GetCart(obj)); 中的这一行。
    • 作为实验,我从Startup.cs:services.AddScoped&lt;Cart&gt;(obj =&gt; SessionCart.GetCart(obj)); 中删除了这一行。事实上,该网站并没有出现在新的构造函数之后。所以,是的,我猜这行告诉 ASP.NET Core 如果构造函数需要它提供Cart
    • 是的,依赖注入是 asp.net 核心的基础部分。它使应用程序更易于测试和维护。服务通常使用接口定义。您将为依赖项实现创建一个接口并在 Startup.xml 中注册它。例如services.AddScoped(); docs.microsoft.com/en-us/aspnet/core/fundamentals/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2018-08-14
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多