当A用户搜索: "广州"的同时, B用户搜索: "深圳", 结果是A用户的搜索也变成了深圳

解决方案 »

  1.   


    如果不用静态, 如何让
    // 分页参数 
        public static int myPage; 
        public static string mySearchKeyword; 
        public static string mySearchList; 在整个类中, 都可以调用呢? 因为还有其他的函数, 需要使用该参数.
      

  2.   

    [ThreadStatic]
    public static int myPage; 
    public static string mySearchKeyword; 
    public static string mySearchList; 表示这几个变量是线程持有的
    而不是所有线程共有的这样每个线程都会拥有独有的,静态的myPage,mySearchKeyword和mySearchList
      

  3.   


    我大概分析了一下
    可能是下面原因造成的:多个用户请求的是同一个page实例,所以即便声明ThreadStatic也会认为是这个page实例的静态属性
    1.page对象相同-->2.所有赋值均在同一个page对象进行-->3.page对象占用的线程不变-->4.page对象改变自己线程内的static属性
    解决方法:采用缓存技术缓存用户请求,例如:
            public static Dictionary<string, object[]> cache;
            protected void Page_Load(object sender, EventArgs e)
            {
                string cacheKey = string.Format("user:{0}",userid);
                if (!cache.ContainsKey(cacheKey))
                { 
                    cache.Add(cacheKey,"用户搜索关键字");
                }
            }
      

  4.   

    将绑定放入page.IsPostBack中
    且记你的公共变量,不能赋session等全局值!!!!