使用会话变量在arraylist中存储和显示多个查询字符串

时间:2015-11-11 07:22:58

标签: c# asp.net .net arraylist session-variables

我有一个带有网格产品的网络表单。当您点击产品时,它会转到显示单个产品的页面,其中包含“添加到购物车”按钮。我想要做的是当我点击“添加到购物车”按钮时,每当用户点击“添加到购物车”按钮时,会话就会将productId的查询字符串存储在数组列表中。我能够将它存储在会话变量中,但是当我想显示所有查询字符串时,只显示最新的查询字符串。提前谢谢。

以下是“添加到购物车”按钮的代码:

protected void btnAdd_Click(object sender, EventArgs e)
    {
        string productId;

        ArrayList arProduct = new ArrayList();

        if (Request.QueryString.Get("ProductId") != null)
        {
            productId = Request.QueryString.Get("ProductId");
            arProduct.Add(productId);
        }

        Session["Cart"] = arProduct;
        Response.Redirect("Cart.aspx");
    }

以下是Cart.aspx页面加载的代码:

protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["Cart"] != null)
        {
            lblProducts.Text = "Here are your products: " + "<ul>";
            ArrayList alProduct = new ArrayList();
            alProduct = (ArrayList)Session["Cart"];
            foreach (string item in alProduct)
            {
                lblProducts.Text +=  "<li>" + item + "</li>";
            }
            lblProducts.Text += "</ul>";
        }
    }

1 个答案:

答案 0 :(得分:1)

点击“添加”后,您每次都会创建一个新的arProduct并将其放入Session["Cart"]。因此,先前的添加将被覆盖。您需要在add事件处理程序中重用Session['Cart']

protected void btnAdd_Click(object sender, EventArgs e)
{
    string productId;

    ArrayList arProduct = Session['Cart'] as ArrayList;
    if(arProduct == null)
    {
        arProduct = new ArrayList();
        Session['Cart'] = arProduct;
    }

    if (Request.QueryString.Get("ProductId") != null)
    {
        productId = Request.QueryString.Get("ProductId");
        arProduct.Add(productId);
    }

    Session["Cart"] = arProduct;
    Response.Redirect("Cart.aspx");
}

编辑:

为了它的价值,我会将arProduct的代码放入属性中。并在btnAdd_Click处理程序和页面加载

中使用它