我的asp.net网站即使在网站停止运行后也会保存列表中的项目变量(购物车)。这很危险,因为登录的其他用户将看到相同的项目列表(购物车)。 我将项目添加到列表中,然后关闭浏览器,然后我重新运行网站并将项目添加到购物车,但它仍然显示我在重新打开浏览器之前添加的项目。 当我之前使用Web应用程序并使用非常相似的代码时,这不会发生。有没有办法解决这个问题?
在客户端,我有一个装满购物项目的gridview,并带有添加到购物车的按钮:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "AddToCart")
{
int rowIndex = ((GridViewRow)((Button)e.CommandSource).NamingContainer).RowIndex;
GridViewRow row = GridView1.Rows[rowIndex];
Label ID = (Label)row.FindControl("lblItemId");
int itemID = Convert.ToInt32(ID.Text);
lstCart.Items.Clear();
OrderClass.AddToCart(itemID);
lstCart.DataSource = OrderClass.ViewAllOrderItem();
lstCart.DataBind();
Button clicked = (Button)row.FindControl("btnAddToCart");
clicked.Enabled = false;
Button remove = (Button)row.FindControl("btnRemoveFromCart");
remove.Visible = true;
}
这个调用的方法来自名为order class的静态类,如下所示:
private static List<Tuple<string, string>> allItems = new List<Tuple<string, string>>();
private static List<string> itemList;
public static void AddToCart(int itemID)
{
ItemCart.Add(itemID);
}
作为数据源的方法,列表框显示购物车中的所有商品如下:
public static List<string> ViewAllOrderItem()
{
allItems = ItemCart.GetAllOrderItems();
itemList = new List<string>();
foreach (Tuple<string, string> eachItem in allItems)
{
itemList.Add("Item Name= " + eachItem.Item1 + " , Price= " + eachItem.Item2);
}
return itemList;
}
此Order类调用的名为Itemcart的静态类中的方法是
private static List<int> orderItems = new List<int>();
public static void Add(int itemID)
{
orderItems.Add(itemID);
}
和
public static List<Tuple<string,string>> GetAllOrderItems()
{
return ShoppingItems.GetItems(orderItems);
}
ItemCart调用的静态类购物项中的方法是:
public static List<Tuple<string, string>> GetItems(List<int> itemID)
{
List<Tuple<string, string>> currentItemsList = new List<Tuple<string, string>>();
using (DataConnection con = new DataConnection())
{
foreach (int i in itemID)
{
string itemName = con.GolfItems.Where(gi => gi.ItemID == i).Select(gi => gi.ItemName).FirstOrDefault();
string itemPrice = con.GolfItems.Where(gi => gi.ItemID == i).Select(gi => gi.ItemPrice).FirstOrDefault();
currentItemsList.Add(Tuple.Create(itemName, itemPrice));
}
}
return currentItemsList;
}
答案 0 :(得分:0)
我认为您的问题是您拥有的静态类的结果。如果未正确完成,这在Web环境中可能非常危险。当你有一个静态类时,很容易产生竞争条件,其中一个会话在静态属性或变量上设置值,然后由另一个会话使用。
我的建议是你重构将静态类和静态方法更改为非静态类和方法,你的问题很可能就会消失。
希望有所帮助。