现在手头在做一个项目,是个网站,我现在做的是Login和Query这2个模块,就是登陆和查询功能现在碰到2个问题:1.Login模块中对网页访问权限的控制现在的我的想法是登陆的时候,一旦验证成功,那么将用户名USERNAME存到SESSION中,然后以后每次跳转到先检验这个SESSION是否为空,如果为空,那么返回登录页面,如果不为空,则正常显示网页
对于这个问题,个人觉得现在的方法不是很好,我想问各位还有没有其他的方法2.Query模块中Gridview的分页问题现在我用的是Sqlsource控件设置为Gridview的数据源,但是此时需要根据页面上不同的条件查询出结果并显示给用户,每次改变条件的时候就把Sqlsource的selectcommand属性重新设置
现在我把Gridview设置了分页,第一页显示是正常,第二页之后就无法显示,是因为页面刷新后数据源没有重新绑定,于是在GridView1_OnPageIndexChanged的方法中进行了绑定,解决了分页显示问题,但是这个时候,每次点页码的时候数据都会重新进行查询,然后绑定,个人觉得效率很低,想问各位还有什么好的方法?PS:本人学.NET不久 请各位回答的大大 多写几个字 不要直接粘一句代码就完了
不然肯定会有N多人留这样的言问题1:SESSION["USERNAME"]=username
问题2: GridView1.PageIndex = e.NewPageIndex;
        GridView1.DataBind();这些我都知道,只是在使用的时候觉得不好用,想讨教一下还有什么好的方法

解决方案 »

  1.   

    权限问题可以建一个PageBase,里面有判断权限的,然后所有页面都继承这个PageBase
    分页控件网上一大堆
      

  2.   

    忘了说了,PageBase里要写下面的东西
     protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            Response.Expires = 0;
            // 判断是否已经登录 或者 Session 超时
            if (Session["islogin"] == null || Session["islogin"].ToString() == "")
            {//没有登录
              Response.Write("<script>window.parent.location.href='../WebDefult/NotLogin.aspx';</script>");
                      }
        }
      

  3.   

    我想问下  我这是个WEB网站
    是直接把这个方法写成一个静态的全局方法
    还是写一个母板页也就是Master页 
    以后的页面都用来继承这个页面这2种处理方法那个比较好?
      

  4.   

    1.一般存储用户名信息用cookie,用session每次用户关闭浏览器后就无效了。
    2.使用数据库分布,每次只读出显示页面的数据。
      

  5.   

    第1点支持1L,所有页面继承PageBase,但要实现权限控制不能只判断用户是否存在吧,还有权限的实现呢。
    第2点支持10L,每次只读取需要的数据,另外个人感觉最好不要用MS的东西,直接生成HTML是好的,因为不管后台怎么弄,最终到页面都是HTML。
      

  6.   

    就是每次只取需要的数据,例如要求每页显示10条数据,则第一页只读取1-10条
    具体实现一般先使用数据库的row_number()函数排序然后选取需要的数据。MS SQL从2005开始及以后的返本都支持此函数
      

  7.   

    我的数据库是ORACLE 不是SQL SERVER
    如果是这样的话
    在数据库中查询出的结果集岂不是要先查出全部  然后进行排序  然后根据ROW_NUMBER来选取显示
    这样的话效率方面会有影响吗?
    还有ORACLE支持这么做吗?
      

  8.   

    权限控制使用角色,模块,角色模块,用户实现控制
    public class BasePage : System.Web.UI.Page 
        {  
          public  BasePage() 
          { 
          }
          protected override void OnInit(EventArgs O) 
          { 
              if (base.Session["UserId"] == null || base.Session["UserId"].ToString().Equals("")) 
              { 
                  Response.Redirect("~/Error.aspx"); 
              } 
          } 
        } 
    使用分页存储过程
      

  9.   

    ORACLE一直就支持ROW_NUMBER,在我用过的分布中这是一种最高效的方式。特别说明MS SQL从2005开始是因为在这之前的版本(如2000,97等)都不支持,所以这之前的分页是一件很麻烦的事情,而且效率不高。
    如16楼所说,“分页本来就是考虑到每次读取数据才采取的一种方式”。为什么要分页?就是因为数据量太大。页面显示还是小问题,资源占用才是重点。在数据量小的时候不觉得,数据量大了问题就来了。假设一个百万级的数据库,如果有个查询要求把数据全部(即使只要求50%)显示出来,不考虑显示问题。假设一条数据2k,把这些数据全部读到内存要有多大的内存才行?又要什么级别的CPU才能处理这些数据,再加上并发请求