viewState 
session
地址栏
就这么多了最常用还是 地址栏咯!

解决方案 »

  1.   

    session太容易超时了,受服务器的影响,地址栏肯定不行,不安全,上面那么多参数也不好看!而且翻页的时候那样参数还得传进去
      

  2.   

    只要不跳到其他页面上,用viewstate还是可以的,
      

  3.   


    我觉得还是得看实际情况吧!
    1. 放地址栏里面是最方便的,虽然放上去不好看,安全方面,可以写程序的过程中来弥补,比如说,在查询前做一些校验,过滤掉一些非法的参数。
    2. 放到session里面比较省心,不过前提是没有在iis里面做负载均衡,如果涉及到多台web服务器,而你的session是放在服务器内存里面,状态容易丢失;如果只是单台的web服务器,放session里面也是比较方便的。
    3. cookie的话,放得最长久,哪怕你关闭了浏览器,刷新不及时的问题应该是你操作cookie有误所导致,操作cookie要注意几个方面:
        1). cookie是通过domain和path来控制作用范围的,尤其是后面那个属性,js中经常操作cookie失效,主要是由于没有设置path的原因
        2). 如果你通过asp.net后台的response来设置cookie,那么,要注意response只有返回到客户端,才能影响cookie的值,如果是ajax的方式,可能你在服务端已经设置了cookie,但是它这个响应没有返回客户端,导致客户端的cookie并没有被修改。
    4. 如果在webform下,用viewstate是个不错的选择
    5. 如果使用asp.net mvc,用ViewData来缓存查询条件吧
      

  4.   

    改用了viewstate,怎么还是得搜两次搜索按钮才能搜出正确结果   protected void btn_search_Click(object sender, EventArgs e)
        {
            Pager.intPageNo = 1;
            string fields = ddl_field.Text.ToString().Trim();
            string Key = tb_key.Text.ToString().Trim();     
            string str_flyso = fields + " like '%" + Key + "%'";
            ViewState[tablename] = HttpUtility.UrlEncode(str_flyso);
        }//........................
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.Cookies["Admin"] == null)
            {
                Response.Write("<script>window.parent.window.location.href='login.html';</script>");
            }
            Pager.intPageSize = 10;
            if (Request["CurrentPage"] == null)
            {
                Pager.intPageNo = 1;
            }
            else
            {
                Pager.intPageNo = Int32.Parse(Request["CurrentPage"]);
            }
            //初始变量
            string str_Condition = "";
           try
            {
                str_Condition = HttpUtility.UrlDecode(ViewState[tablename].ToString());
            }
            catch
            {
                str_Condition = "";
            }        if (!IsPostBack)
            {
                if (Request["CurrentPage"] == null && Request.QueryString["act"] == null && str_Condition != "")
                {
                    ViewState[tablename] = "";
                    Response.Redirect(pagename);
                    return;
                }
            }
            Response.Write(str_Condition);
            try
            {
                分页代码省略
            }
            //失败处理
            catch //(Exception ex)
            {
                //Response.Write(ex.Message);
                Response.Write("数据库连接出错!");
                Response.End();
            }
        }
      

  5.   

    不光要点搜索两次,我发现viewstate不能保持状态啊,翻了一页之后,这个viewstate就不存在了
      

  6.   

    你的分页用url传的肯定是翻页之后viewstate不在了。
      

  7.   

    页面刷新的用 url储存
    局部刷新的用 隐藏域储存
      

  8.   


     count = pg.GetCount();
           if (!IsPostBack)
           {
               int pagecount = 10;
               int pageindex = 1;
               Repeater1.DataSource = pg.SelectAllDataset(pageindex, pagecount);
               Repeater1.DataBind();
               ViewState["pageindex"] = 1;
               ViewState["paixu"] = "";
               if (count / 10 == 0)
               {
                   pageco = count / 10;
               }
               else
               {
                   pageco = (count / 10) + 1;
               }
               ViewState["pageco"] = pageco;
           }
    我用viewState分页表示毫无压力,。
      

  9.   

    我把ViewState换成session,其它代码全不变,翻到第2页就是正确的结果,但是ViewState就不行,输出ViewState的值发现是空,难道ViewState不能像session和cookies那样保持状态,我并没有对他进行赌空值处理,怎么就把值给丢了呢
      

  10.   

    通过URL传递参数吧,配合使用AspNetPager,我一直这么做的。
    比如一个列表查询页面:1、进入页面后首先根据Url参数构造查询条件,同时设置页面上查询项目的值,2、根据查询条件,查询数据,3、分页处理,使用AspNetPager,可以自动生成分页列表,并且参数都被自动保存下来,分页的时候也不会出问题,4、点击查询的时候,将各个查询参数绑定到Url上重新加载这个页面。这样没有使用ViewState,没有Session,没有cookie,搜索引擎也比较容易收录吧
      

  11.   


    ViewState保存在当前页面中,Seesion保存在服务器,Cookie保存在浏览器,ViewState进入一个新的页面,当然就没了。
      

  12.   

    还是当前面啊,就是翻了一下页,page1.aspx?page=1变成page1.aspx?page=2 而以,这样也不行?
      

  13.   


    这个还需要你根据page去查询数据的
      

  14.   

    现在就是不知道URL安全性怎么处理
      

  15.   

    恩,这样不行,这样相当于页面跳转到新页面了,原页面的viewstate丢失了。这样的话,就用session或者cookie了。
      

  16.   

    我都是用HiddenField呀,Visible="false"安全呀
      

  17.   


    URL的安全性问题就是SQL注入的问题,参数值、参数名这些东西大家都找的出来。SQL注入的问题可以通过参数化查询的方式解决,也就是使用Parameter封装参数。
      

  18.   

    把当前第几页也用viewstate处理掉不就行了么
      

  19.   

    我是这样写的,不知道行不行   SqlParameter[] pars = new SqlParameter[9];
                pars[0] = new SqlParameter("@sTable", SqlDbType.VarChar, 30);
                pars[0].Value = Pager.tablename;
                pars[1] = new SqlParameter("@sField", SqlDbType.VarChar, 200);
                pars[1].Value = Pager.Fields;
                pars[2] = new SqlParameter("@sCondition", SqlDbType.VarChar, 500);
                pars[2].Value = Pager.Condition;
      

  20.   

    有点问题:
    sCondition是你构造好的查询条件吗?这样是不行的,必须为每个要查询的字段传递参数。构造SQL语句的方法不能完全避免注入,包括在存储过程中构造SQL语句。正确的方法应该这样:Select * from table where name = @Name and Gender=@Gender
      

  21.   

    这样ViewState是没有了,URL改变了啊......
      

  22.   


    翻页你没用服务器控件吧,你用的是asp方式的连接吧,用IsPostBack测试一下,如果是第一次哪来的值,只能利用post、get传值
      

  23.   

    我只是一个菜鸟,但是我们做项目用分页的时候有两种方式,1、利用sql语句进行分页,例如:select top PageSize from Nuser where id not in(select top ((currpage - 1) * PageSize) id from Nuser order by id) order by id;其中PageSize表示每一页显示多少条数据,可以用int的类型代入,currpage表示当前是第几页,当不能等于0或小于0!然后我们可以利用两个按钮来控制currpage来进行分页!虽然这种方式是把数据分成几部分读取,速度不是很快,因为你每一按上一页或者是下一页的时候都要进行数据库的访问,但是无论你这是开发C/S还是开发B/S的都可以用这种方式,并且这种方式可以结合第三方控件使用!个人建议:你是开发ASP或者ASP.NET的话最好自己做个自定义控件!
    2、利用第三方控件!我个人建议利用第一种方式比较好!
    但是如果是以一次性读取数据库里的数据,再进行分页的话,建议保存在Session中,Session的时间我们可以修改,ViewState也可以,但是要知道ViewState是不可以在窗体之间中传递的,因为ViewState这是保存在当前页面中的!而Session可以保存一个实体类,个人觉得还是Session好!地址栏的话不好看而且还浪费时间!
      

  24.   

    效率最好的还是URL分页,如果非要用另类的方法用Cache也可以
      

  25.   

    你可以试试隐藏域 思路跟url一样 但是客户不会再看见这个记录 审美上好不少
      

  26.   

    aspnetpager分页控件+存储过程分页
      

  27.   

    晕!还什么cookie、Session。你的条件是页面局部的,还是整个会话全局的?如果是全局的,我想你的老板不炒你那么他的用户、或者将来维护成本也就会炒了他了。
      

  28.   

    如果对于数据定义的范畴都会出错,这是很严重的设计bug。你们再会凑一些编程语句,这也从另一个方面说明你们公司不会进行测试。如果进行测试,当然要测试在一个会话中出现并发访问的情况,看看程序会不会因为不该共享数据时去相互冲突而混乱。把一个测试程序,使用两个并发线程来测试,这是发现程序思路混乱的最简单的测试。
      

  29.   


    Session就像一颗定时炸弹一样!
       还是少用他!
      

  30.   

    viewstate,和session都不怎么靠谱。viewstate只能在当前页有用,session过多的使用,不及时释放的话,会影响性能。
      

  31.   


    ViewState保存在当前页面中,Seesion保存在服务器,Cookie保存在浏览器,ViewState进入一个新的页面,当然就没了。
    说得好,谢谢