我需要一些幫助。我在 MVC 5 .NET Framework 中撰寫了代碼,我使用會話來存盤我的購物車專案串列。這很簡單,但現在我正在為另一個專案重寫 ASP.NET MVC CORE 6 中的代碼,但它沒有按我預期的方式作業。場景:我有一個專案串列如下:
private List<SalesCartItemsModel>? itemsList; //Shopping Cart
public SalesController()
{
itemsList = new List<SalesCartItemsModel>();
}
我想使用 Session 來存盤我的購物車物品。我使用了這個簡單的語法:
Session["cartItems"] = null;
if (Session["cartItems"] != null)
{
itemsList = (List<PurchaseCartItem>)Session["cartItems"];
}
Session["cartItems"] = itemsList;
現在,當我嘗試在 MVC CORE 6 中使用它時,它似乎不再支持這種語法了。到目前為止我嘗試過的是
HttpContext.Session.SetString("cartItems", itemsList)
但它會拋出錯誤并且不接受它。錯誤:
無法從 'System.Collections.Generic.List<.Models.SalesCart.SalesCartItemsModel>' 轉換為 'string'
請幫助我如何在 MVC Core 中實作相同的目標?如何將當前語法中的代碼更改為 MVC CORE 6.0?
uj5u.com熱心網友回復:
也許這就是你想知道的:
楷模:
public class SalesCartItemsModel
{
public string ShopId { get; set; }
public string ShopName { get; set; }
}
public class PurchaseCartItem
{
public string ShopId { get; set; }
public string ShopName { get; set; }
}
會話擴展:
public static class SessionExtensions
{
public static void Set<T>(this ISession session, string key, T value)
{
session.SetString(key, JsonSerializer.Serialize(value));
}
public static T Get<T>(this ISession session, string key)
{
var value = session.GetString(key);
return value == null ? default : JsonSerializer.Deserialize<T>(value);
}
}
程式:
builder.Services.AddSession();
app.UseSession();
控制器:
private List<SalesCartItemsModel>? itemsList;
private List<PurchaseCartItem>? itemListP;
public JsonResult Test()
{
itemsList = new List<SalesCartItemsModel>();
itemsList.Add(new SalesCartItemsModel { ShopId = "1", ShopName = "Apple" });
itemsList.Add(new SalesCartItemsModel { ShopId = "2", ShopName = "Banana" });
HttpContext.Session.Set<List<SalesCartItemsModel>>("cartItems", itemsList);
var value = HttpContext.Session.Get<List<SalesCartItemsModel>>("cartItems");
return Json(value);
}
結果:

當你沒有在 session 中存盤值時,你可以判斷value=null為 session 存盤新值:
public JsonResult Test()
{
itemsList = new List<SalesCartItemsModel>();
//itemsList.Add(new SalesCartItemsModel { ShopId = "1", ShopName = "Apple" });
//itemsList.Add(new SalesCartItemsModel { ShopId = "2", ShopName = "Banana" });
//HttpContext.Session.Set<List<SalesCartItemsModel>>("cartItems", itemsList);
var value = HttpContext.Session.Get<List<SalesCartItemsModel>>("cartItems");
if (value == null)
{
itemListP = new List<PurchaseCartItem>();
itemListP.Add(new PurchaseCartItem { ShopId = "1", ShopName = "Orange" });
itemListP.Add(new PurchaseCartItem { ShopId = "2", ShopName = "Pear" });
HttpContext.Session.Set<List<PurchaseCartItem>>("cartItems", itemListP);
var valueP = HttpContext.Session.Get<List<PurchaseCartItem>>("cartItems");
return Json(valueP);
}
else
{
return Json(value);
}
}
結果:

當你的 中沒有值時itemsList,你可以判斷value.Count=0為會話添加一個新值:
public JsonResult Test()
{
itemsList = new List<SalesCartItemsModel>();
//itemsList.Add(new SalesCartItemsModel { ShopId = "1", ShopName = "Apple" });
//itemsList.Add(new SalesCartItemsModel { ShopId = "2", ShopName = "Banana" });
HttpContext.Session.Set<List<SalesCartItemsModel>>("cartItems", itemsList);
var value = HttpContext.Session.Get<List<SalesCartItemsModel>>("cartItems");
if (value.Count == 0)
{
itemListP = new List<PurchaseCartItem>();
itemListP.Add(new PurchaseCartItem { ShopId = "1", ShopName = "Orange" });
itemListP.Add(new PurchaseCartItem { ShopId = "2", ShopName = "Pear" });
HttpContext.Session.Set<List<PurchaseCartItem>>("cartItems", itemListP);
var valueP = HttpContext.Session.Get<List<PurchaseCartItem>>("cartItems");
return Json(valueP);
}
else
{
return Json(value);
}
}
結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/492111.html
標籤:C# 网 asp.net-mvc asp.net 核心 .net-core
上一篇:如何將部分視圖從ASP.NETMVC應用程式根加載到區域視圖中?
下一篇:d-flex引導程式內的填充
