当CheckBoxList被触发时,会话将不会在PostBack上存储属性
问题描述:
我的问题是我的列表在回发过程中没有被保留。 我将其保存到当CheckBoxList被触发时,会话将不会在PostBack上存储属性
Page.Session["mine"]
我的设计页面包含2个控制器(标签和CheckBoxList的)。因为项目数量会发生变化,所以我使用CheckBoxList而不是单独的CheckBox控件,并在page_load()中动态加载每个项目。
我不确定它被称为成员,属性或属性。但我确实有一个变量,每个类的方法都可以调用,以保存CheckBoxList上所有选定项的位置。
Private List<int> locCheck = new List<int>();
当OnSelectedIndexChanged()被触发时,locCheck被更新,并存储在会话
locCheck = new List<int>();
int num = 0;
foreach(ListItem li in CheckBoxList.Items)
{
if(li.Selected)
locCheck.Add(num);
num++;
}
if(locCheck.Count == 0) //for testing purpose
locCheck.Add(1); //2nd item
Page.Session["mine"]=locCheck;
我想保持选定的检查上回发,但它永远不会发生。在Visual Studio中,我没有问题。但是,当我加载到服务器上,我使用的单,我得到以下信息:
Object reference not set to an instance of an object
我有这个在Page_Load中
if(Page.IsPostBack)
{
locCheck = new List<int>();
locCheck = (List<int>) Page.Session["mine"];
Label.Text = String.Format("Is PostBack {0}/{1}", locCheck.Count, CheckBoxList.Items.Count);
}
else
{
Label.Text = String.Format("Is Not PostBack 0/{0}", CheckBoxList.Items.Count);
}
我知道问题出在这一行,因为locCheck.Count从未在Label.Text变化
locCheck =(List<int>) Page.Session["mine"];
我知道我必须附上
if(Page.Session["mine"] != null)
但我不相信这是目前的必需品。由于测试目的,它应该始终具有至少包含一个元素的locCheck。
我找不到答案,所以我从头开始。而不是清单,我使用的复选框面板在不需要时会变为不可见。
我对Sessions仍然不确定,但是我发现了一些奇怪的东西。
例如:
Session["mine"] = locCheck; //where lockCheck has 4 elements
有一些locCheck设置为某个时候的Page_Load之间空的按钮点击次数。 我发现,如果是这样,调试回locCheck不为空,并具有正确的元素值的点。然后执行以下操作:
Session["mine"] = locCheck;
,后来,你在点击事件
locCheck = new List<int>();
locCheck = (List<int>) Session["mine"];
//then make your update:
locCheck[3] = 7;
Session["mine"] = locCheck;
执行以下代码出于某种原因,如果我不这样做了Session [“雷”]和locCheck变为空,数据丢失。
答
尝试使用此
locCheck = (List<int>) Page.Session["mine"].ToString();
为什么要使用page.session时,只能使用会话。