如何在我的控制器中注入一个模型列表,这样我就可以使用列表数据并将其添加到ViewBag中,以便在ASP.Net核心中的a



我使用一个带有发布功能的提交按钮,使用模型(Cart.cs(将数量和产品发送到列表项。我如何将数据(注入(到控制器中,以便使用所有订单的总数量添加到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; }
}
}

我认为您可以尝试使用session,这样您就可以在不同的操作中保留列表。检查会话是否为null或不在您的操作中。如果session不为null,请使用session设置Lines。在将数据添加到行之后,用更新的行设置会话

配置:

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);
}

最新更新