更新字符串列表会话变量

本文关键字:变量 会话 列表 字符串 更新 | 更新日期: 2023-09-27 18:05:32

我正在尝试在 ASP.net 中制作一个程序,其中用户从第 1 页(默认.aspx(中选择产品,单击按钮放入购物车,它出现在产品列表的第二页。

List<string> skuList = new List<string>();
if (validation)
{
    foreach (GridViewRow row in GridView1.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            CheckBox chkRow = (row.Cells[0].FindControl("chkRow") as CheckBox);
            if (chkRow.Checked)
            {
                skuList.Add(row.Cells[2].Text);
            }
        }
    }
}
else { Response.Write("<script>alert('At least one product need to be selected!');</script>"); }
Session["sku"] = skuList;

遇到的问题是我无法更新会话["sku"]。

我想达到的目标:

在第 1 页上,用户选择产品编号 1,2,3,然后会话变量更新为 1,2,3在第 2 页上,用户继续选择产品编号 8,然后会话变量更新为 1,2,3,8

我试图做类似的事情

 Session["sku"] = Session["sku"] + skulistt;

当然没有用。

更新字符串列表会话变量

看来你对会话有误解。存储在会话中的对象可以是强类型,但返回的类型化始终是对象。 它看起来像下面这样(从等式中去除会话(:

object myvar = new List<string>();
myvar.Add("mystring"); // will not compile because myvar is defined as object.

若要将myvar用作列表,需要强制转换为正确的类型:

var myvar1 = (List<string>)myvar; 
// or 
var myvar2 = myvar as List<string>; 
myvar1.Add("mystring");
myvar2.Add("mystring");

myvarmyvar1 之间的区别在于,myvar可以保存对任何object类型的引用,所以我可以这样做:

object myvar = new List<string>();
myvar = new WebClient();    

但我不能用myvar做到这一点,因为它被定义为WebClient不是从中派生的List<string>

因此,要将字符串添加到会话变量,需要将其转换为正确的类型:

var mylist = (List<string>)Session["sku"];
list.Add("mystring");

但是,看起来您只想替换该值:

session["sku"] = skulistt;
您必须将

列表从会话中取出,在列表中添加新元素,然后像这样重新分配给会话:

List<string> list= List<string>();
if(Session["sku"] != null)
     list = (List<string>)Session["sku"];
list.Add("item");
Session["sku"] = list;

更新:

在您的情况下,请这样做:

Session["sku"] = skulistt;

更改您的代码,例如:

List<string> list= List<string>();
if(Session["sku"] != null)
     list = (List<string>)Session["sku"];
if (validation)
{
    foreach (GridViewRow row in GridView1.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            CheckBox chkRow = (row.Cells[0].FindControl("chkRow") as CheckBox);
            if (chkRow.Checked)
            {
                skuList.Add(row.Cells[2].Text);
            }
        }
    }
}
else { Response.Write("<script>alert('At least one product need to be selected!');</script>"); }
Session["sku"] = skuList;