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

Storing and displaying multiple query string in arraylist using session variables

我有一个包含产品网格的网络表单。当您单击该产品时,它会将您带到一个显示带有 "add to cart" 按钮的单个产品的页面。我想要做的是,当我单击 "add to cart" 按钮时,每次用户单击 "add to cart" 按钮时,会话都会将 productId 的查询字符串存储在数组列表中。我可以将它存储在会话变量中,但是当我想显示所有查询字符串时,只显示最近的一个。提前致谢。

下面是 "add to cart" 按钮的代码:

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>";
        }
    }

当您单击 'add' 时,您每次都会创建一个新的 arProduct 并将其放入 Session["Cart"]。因此,先前的添加将被覆盖。您需要在添加事件处理程序中重用 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 处理程序和页面加载

中使用它