现在是在页面加载之后就生成了一个dataset,然后用不断的用ajax修改dataset的数据,最后才保存进数据库。刚开始我放在ViewState中,试一下ajax居然访问不到;现在放在session中,感觉太占资源了

解决方案 »

  1.   

    ViewState的范围只是本页面,不想用session的话,就用cache
      

  2.   

    一般的处理是这样的:   
        
      DataSet   dsTest   =   new   DataSet();         //声明一个DataSet   
      if(ViewState["ds"]   ==   null)                 //第一次执行,ViewState为空   
      {   
      DataTable   dt   =   new   DataTable();   
      dt.Columns.Add("col");   
      DataRow   dr   =   dt.NewRow();   
      dr[0]   =   "abc";   
      dt.Rows.Add(dr);   
      dsTest.Tables.Add(dt);   
      }   
      else                     //ViewState不为空   
      {   
      dsTest   =   (DataSet)ViewState["ds"];     //提取ViewState中的值   
      DataRow   dr   =   dsTest.Tables[0].NewRow();   
      dr[0]   =   "bcd";   
      dsTest.Tables[0].Rows.Add(dr);   
      }   
      ViewState["ds"]   =   dsTest;       //将新DataSet写人ViewState   
      Response.Write(dsTest.Tables[0].Rows.Count.ToString());   
        
      把以上代码写到一个Button的Click事件里,连续单击Button,可以看见输出的数值不断增加。   
      

  3.   

    就用viewstate就可以了,用session不好viewstate是服务器变量,js取不到,所以需要一个服务器端函数   
      [AjaxMethod]   
      public   string   GetViewStateValue(string   key)   
      {   
          if(ViewState[key]==null)   
      {     
      return   "";   
      }   
      return   ViewState[key].ToString();   
      }   
      然后用ajax访问这样就可以了
      

  4.   

    如果用ajaxpro 来实现ajax的话, 貌似只能取session里面的值的,
      

  5.   

    用cache吧,viewstate不是很适合放dataset,而且ajax没有回发,所以也取不到viewstate
      

  6.   

    viewstate, cache, session都能用,注意它们的区别就可以了。viewstate的好处是不会过期。缺点是作用域局限在每个页面或用户控件,有ajax时使用不便(因为viewstate本来就是为回发所设计的)每次回发都会在客户端和服务端之间来回倒腾,数据量大,网速慢时对性能影响很大,而且如果数据量太大,突破了4M,还得修改web.config设置; session的好处是作用范围是每个用户,在多个用户控件或页面之间共享数据比较有用,存放在服务端,不需要来回倒腾,性能较好,缺点是会过期(虽然可以通过定时刷新页面的办法来强制不过期),另外因为session是针对用户的,所以如果并发用户很多时就会影响性能;cache是被所有用户共享的,好处是节省了资源,缺点主要是难以针对每个用户定制,如果需要修改cache中的内容,则多个用户之间容易产生冲突。
    所以,我一般用viewstate来保存一个页面里需要持久化的一些全局变量,用session在多个页面之间共享少量数据如状态变量等,用cache来存放比较稳定,而且能为所有用户共享的数据。
      

  7.   


    哎,看来就用session了,我保存的数据是用户级的。