更新字符串列表会话变量

时间:2014-05-28 17:51:08

标签: c# asp.net session

我正在尝试在ASP.net中创建一个程序,用户从第1页(default.aspx)中选择产品,单击按钮放入购物车,它将显示在产品列表的第二页中。< / p>

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;

我遇到的问题是我无法更新Session [“sku”]。

我想达到的目标:

第1页上的

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

我尝试做类似

的事情
 Session["sku"] = Session["sku"] + skulistt;

当然没用。

2 个答案:

答案 0 :(得分:2)

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

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执行此操作,因为它已定义为List<string> WebClient并非来自var mylist = (List<string>)Session["sku"]; list.Add("mystring");

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

session["sku"] = skulistt;

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

{{1}}

答案 1 :(得分:1)

你必须从会话中获取List,在List中添加新元素,然后像这样重新分配给Session:

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;