ASP.NETCoreアプリケーションにショッピングカートを実装する際に問題が発生しました。これを行うためにセッションストレージを使用していますが、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);
}
次の名前を使用して、カートをアクションに渡しますcart
。
context.ActionArguments["cart"] = _mand;
ただし、actionメソッドからアクセスする場合、名前はmand
次のとおりです。
public IActionResult BonEdit(Winkelmand mand, NieuwViewModel model)
アクションメソッドに渡されるには、これら2つの名前が一致している必要があります。
context.ActionArguments["mand"] = _mand;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加