我在购买ASP.NET Core应用程序中的购物车时遇到一些问题。我正在使用会话存储来执行此操作,但每次执行OnActionExecuted
时,传递给过滤器的购物车对象都是空的。任何人都知道为什么?
会话过滤器类:
public class WinkelmandSessionFilter : ActionFilterAttribute
{
private Winkelmand _mand;
public WinkelmandSessionFilter()
{
}
public override void OnActionExecuting(ActionExecutingContext context)
{
_mand = ReadCartFromSession(context.HttpContext);
context.ActionArguments["cart"] = _mand;
base.OnActionExecuting(context);
}
public override void OnActionExecuted(ActionExecutedContext context)
{
WriteCartToSession(_mand, context.HttpContext);
base.OnActionExecuted(context);
}
private Winkelmand ReadCartFromSession(HttpContext context)
{
Winkelmand cart = context.Session.GetString("cart") == null ?
new Winkelmand() : JsonConvert.DeserializeObject<Winkelmand>(context.Session.GetString("cart"));
return cart;
}
private void WriteCartToSession(Winkelmand cart, HttpContext context)
{
context.Session.SetString("cart", JsonConvert.SerializeObject(cart));
}
}
使用此过滤器的方法:
[ServiceFilter(typeof(WinkelmandSessionFilter))]
public IActionResult BonEdit(Winkelmand mand, NieuwViewModel model)
{
var bon = new Bon();
bon.NaamGeadreseerde = model.naamGeadreseerde;
bon.EmailGeadreseerde = model.emailGeadreseerde;
bon.NaamGever = model.naamGever;
bon.Bedrag = model.Bedrag;
bon.Boodschap = model.Boodschap;
bon.Winkel = model.Winkel;
bon.BonId = Guid.NewGuid().GetHashCode();
mand.bonToevoegen(bon);
bon.genereerPdf();
return RedirectToAction(nameof(BonVoorbeeld), bon);
}
答案 0 :(得分:1)
您正使用名称cart
:
context.ActionArguments["cart"] = _mand;
但是当您从操作方法访问它时,名称为mand
:
public IActionResult BonEdit(Winkelmand mand, NieuwViewModel model)
为了将其传递给动作方法,这两个名称必须匹配。
context.ActionArguments["mand"] = _mand;