我的问题是在PostBack期间我的列表没有被保留。 我将其保存到
Page.Session["mine"]
我的设计页面包含2个控件(Label和CheckBoxList)。
因为项目数量会改变,我使用CheckBoxList而不是单独的CheckBox控件,并在page_load()中动态加载每个项目;
我不确定它的名称,成员,属性或属性。但是我确实有一个变量,类的每个方法都可以调用它来保存CheckBoxList上所有选定项的位置。
Private List<int> locCheck = new List<int>();
触发OnSelectedIndexChanged()时,会更新locCheck并将其存储在Session
中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;
我想在PostBack上保留选定的检查,但它永远不会发生。在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。
我找不到答案,所以我从头开始。而不是检查表我使用的复选框面板在不需要时变为不可见。
我仍然不确定塞申斯,但我发现了一些奇怪的事情。
例如:
Session["mine"] = locCheck; //where lockCheck has 4 elements
有时候,在page_load和按钮点击之间的某个时间,locCheck被设置为null。 我发现在这样的情况下,调试回到locCheck不为空且具有正确元素值的点。然后执行以下操作:
Session["mine"] = locCheck;
以后,您在点击事件中执行以下代码
locCheck = new List<int>();
locCheck = (List<int>) Session["mine"];
//then make your update:
locCheck[3] = 7;
Session["mine"] = locCheck;
由于某种原因,如果我不这样做,Session [“mine”]和locCheck都变为null并且数据丢失。
答案 0 :(得分:0)
尝试使用此
locCheck = (List<int>) Page.Session["mine"].ToString();
为什么在只能使用会话时使用page.session。