触发CheckBoxList时,Session不会在PostBack上存储属性

时间:2017-06-17 20:41:20

标签: c# asp.net mono

我的问题是在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并且数据丢失。

1 个答案:

答案 0 :(得分:0)

尝试使用此

      locCheck = (List<int>) Page.Session["mine"].ToString();

为什么在只能使用会话时使用page.session。