得到一个空列表,不知道为什么

时间:2014-05-06 19:40:39

标签: c# .net webforms

我正在构建编辑人员详细信息页面。工作人员属于我们在ListItem内使用CheckBoxList (groupsList)指定的群组。选择要编辑的工作人员后,将显示填写了所有详细信息的表单,包括他们当前所属的组。我已经获得了这个列表(这是在public partial class edit_user: System.Web.UI.Page声明中宣布的:

public List<string> groups = new List<string>();

当检查他们当前所属的组(来自数据库)时,我将组ID(编辑:从数据库中提取)添加到列表中:

groups.Add(group_id);

然后。当编辑工作人员的任何人点击“保存”时。按钮,我需要更新它们所属的组,其中包括从数据库中删除记录(因此我为什么要在加载时跟踪它们所属的组)。我正在做以下事情:

string group_id;

foreach (ListItem item in groupsList.Items)
{
    g_id = item.Value;
    System.Diagnostics.Debug.WriteLine(g_id);
    if (groups.Contains(g_id))
    {
        System.Diagnostics.Debug.WriteLine("already belongs");
    }
    else
    {
        System.Diagnostics.Debug.WriteLine("doesn't belong");
    }
}

但它没有用,所以我想确保我的列表中还有一些项目:

foreach (string i in groups)
{
    System.Diagnostics.Debug.WriteLine(i);
}

没有打印出来。我无法弄清楚为什么我的OnClick事件处理程序中的列表突然变空。

1 个答案:

答案 0 :(得分:2)

  

我的OnClick事件处理程序中的列表突然变空。

事件处理程序是由浏览器发出的新http请求触发的,来自浏览器的每个新http请求都意味着您正在使用新的网页类实例。这通常会使人们感到困惑:与Windows窗体不同,您的页面类窗体在用户事件之间不会保持活动状态。它不是服务器上的活动对象。相反,ASP.Net运行时为每个请求创建一个新类的实例,并跟随Page Lifecycle与您的类一起从浏览器提供一个http请求。一旦完成单个请求,就会销毁此页面类实例。

您还会发现这意味着每次请求都会检查您网页类代码的所有,包括page_load,page_init等事件。

您需要将此列表存储在将跨越http请求保留的位置。会议是一个常见的选择。