我正在尝试在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,2,3,然后会话变量更新为1,2,3 在第2页上,用户继续选择产品编号8,然后会话变量更新为1,2,3,8
我尝试做类似
的事情 Session["sku"] = Session["sku"] + skulistt;
当然没用。
答案 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");
myvar
和myvar1
之间的区别在于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;