我想定义一个全局数组,能在所有aspx页面中进行修改和应用。
比如建立string aa[]这个数组,每成功登陆一个用户就往aa[]里增加一个记录,退出一个用户则删除一条记录,请问如何实现

解决方案 »

  1.   


    public class SingletionList
        {
            private static SingletionList singleton;
            private System.Collections.ArrayList list = new System.Collections.ArrayList();        protected SingletionList()
            {  }        public static System.Collections.ArrayList GetList()
            {
                if (singleton == null)
                {
                    lock (new object())
                    {
                        if (singleton == null)
                        {
                            singleton = new SingletionList();
                        }
                    }
                }
                return singleton.list;
            }
        }
    调用:public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ArrayList list = SingletionList.GetList();
                list.Add("aaa");
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            ArrayList list = SingletionList.GetList();
            this.Label1.Text = list[0].ToString();
        }
    }
      

  2.   

    是在global.asa 的Application_Start事件里这样定义吗?string[] user;
    在aspx页面里如何使用这个数组呢?
      

  3.   

    我写的那段代码就是用单件模式写的可以全局访问的ArrayList. 因为string[]在new的时候是要固定长度的,所以用ArrayList.
    global.asa里面的Session_Start只是当一个请求被发起时的事件,和搂主的需求是不同的。Application_Start是应用程序运行时触发的事件,就更没关系了。
    要么你用HttpApplicationState做,但对于你的需求我不是很推荐
      

  4.   

    可能我的表达有问题,其实我的需求是这样的,首先建立一个数组string[] user;
    然后每成功登陆一个用户后就要在user这个数组中存入一个值,比如ID,我一直要使用这个全局数组user,以便对所有在线用户进行随机抽取,公布中奖ID您所使用的那方式能保证吗?
      

  5.   

    不使用数据表就用Applocation级变量.
      

  6.   

    你这里需要的是登录后的用户的信息,需要看是如何记录哪些人在线。记录在线的登录用户可以使用Cache或者数据库。如果使用数据库保存登录用户,你的问题将不存在什么问题,根据登录用户的总数生成一个随机数。
    如果使用Cache,我想应该可以这样设计:首先分两个状态,登录和注销,需要注意的是B/S中是无状态的,你不知道用户什么时候会向服务器发出请求,表示他在线,现在好的解决方案就是
    ajax从浏览器上定时向服务器发出请求,表示登录用户尚在。登录后:可以定义一个Hashtable,用户登录后,增加一条信息,并保存这个Hashtable到Cache中,主动注销或者直接关闭浏览器再从这个Hashtable中删除相应的信息。
      

  7.   

    能,单间模式的本意就是全局唯一。
    随便你调用几次SingletionList.GetList(); 获取的ArrayList都是同一个ArrayList所以我在调用的时候一次是在isPostBack中,这只有在首次请求中执行,
    而在Button_Click中再次调用,注意,Button_Click的代码是回发后的,显示的还是同一个ArrayList根据你的需求,你可以在登陆方法中SingletionList.GetList().Add(用户对象);
    然后在抽奖的时候在随机从SingletionList.GetList()中取出一个用户对象。
    你可以一试.
      

  8.   

    我试下楼上的方法,请问下SingletionList类是放在.cs里吗?
    后面的代码就是aspx中的应用?
      

  9.   

    结帐结帐了,多谢各位拉
    jeremyyang824的方法可行
      

  10.   

    SingletionList类 放在cs文件里面。
    后面的代码只是随便调用了给你看看的,主要是SingletionList类
      

  11.   

    请问一下jeremyyang824,SingletionList类的实例会不会被回收掉?