更新字符串列表会话变量
本文关键字:变量 会话 列表 字符串 更新 | 更新日期: 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");
myvar
和 myvar1
之间的区别在于,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;