如何直接从控制器操作访问购物车?
How do I access the shopping cart directly from a controller action?
关于 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"
};
}
这是一个非常简单的操作方法,旨在简单地 return 购物车中的商品数量。
鉴于示例项目中购物车的实现方式,在 CartSize
方法中获取购物车中商品数量的好方法是什么?
谢谢!
将购物车服务注入您的控制器并在您的操作方法中使用
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()
};
}
关于 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"
};
}
这是一个非常简单的操作方法,旨在简单地 return 购物车中的商品数量。
鉴于示例项目中购物车的实现方式,在 CartSize
方法中获取购物车中商品数量的好方法是什么?
谢谢!
将购物车服务注入您的控制器并在您的操作方法中使用
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()
};
}