我使用一个提交按钮与post功能,以发送数量和产品的列表项目使用模型(购物车)。政务司司长)。如何将数据(注入)获取到控制器,以便使用所有订单的数量总和添加到ViewBag中,以显示在站点的不同部分?
using System.Collections.Generic;
using System.Linq;
namespace MyStore.Models
{
public class Cart
{
public List<CartLine> Lines { get; set; } = new List<CartLine>();
public virtual void AddItem(Product product, int quantity)
{
CartLine line = Lines
.Where(p => p.Product.ProductID == product.ProductID)
.FirstOrDefault();
if (line == null)
{
Lines.Add(new CartLine
{
Product = product,
Quantity = quantity
});
}
else
{
line.Quantity += quantity;
}
}
public virtual void RemoveLine(Product product) =>
Lines.RemoveAll(l => l.Product.ProductID == product.ProductID);
public decimal ComputeTotalValue() =>
Lines.Sum(e => e.Product.Price * e.Quantity);
public virtual void Clear() => Lines.Clear();
}
public class CartLine
{
public int CartLineID { get; set; }
public Product Product { get; set; }
public int Quantity { get; set; }
}
}发布于 2022-10-03 10:14:03
我认为您可以尝试使用会话,以便您可以在不同的actions.Check会话中保持列表为空或不在action.If会话中为空,在将数据添加到行之后设置带有session.And的行,使用更新的Lines.Here设置会话是一个演示:
配置:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromDays(1);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
}主计长:
public List<CartLine> Lines { get; set; } = new List<CartLine>();
public virtual void AddItem(Product product, int quantity)
{
if (string.IsNullOrEmpty(HttpContext.Session.GetString("Lines")))
{
Lines=JsonConvert.DeserializeObject<List<CartLine>>(HttpContext.Session.GetString("Lines"));
}
CartLine line = Lines
.Where(p => p.Product.ProductID == product.ProductID)
.FirstOrDefault();
if (line == null)
{
Lines.Add(new CartLine
{
Product = product,
Quantity = quantity
});
}
else
{
line.Quantity += quantity;
}
HttpContext.Session.SetString("Lines", JsonConvert.SerializeObject(Lines));
}
public virtual void RemoveLine(Product product){
if (string.IsNullOrEmpty(HttpContext.Session.GetString("Lines")))
{
Lines=JsonConvert.DeserializeObject<List<CartLine>>(HttpContext.Session.GetString("Lines"));
}
Lines.RemoveAll(l => l.Product.ProductID == product.ProductID);
HttpContext.Session.SetString("Lines", JsonConvert.SerializeObject(Lines));
}
public decimal ComputeTotalValue(){
if (string.IsNullOrEmpty(HttpContext.Session.GetString("Lines")))
{
Lines=JsonConvert.DeserializeObject<List<CartLine>>(HttpContext.Session.GetString("Lines"));
}
Lines.Sum(e => e.Product.Price * e.Quantity);
}https://stackoverflow.com/questions/73932291
复制相似问题