热门文章 | 热门软件| 热门源码 | 热门电影 | 知识库 | 联系我们
软件 源码 教程 影视 健康 招聘
  HTML | JavaScript | ASP | PHP | JSP | NET | VB | VC | VF | Windows | Linux | Mysql | Mssql | Oracle | Struts 
当前位置: 创世纪计算机资源网 -> 文章频道 ->asp 
站内搜索:
ASP搜索结果分页问题
作者:二六空间 来源:blog 整理日期:2007-11-13

先看下常用的分页代码:
读取记录部分: 程序代码
page=request.querystring("page") page值为接受值
                rs.PageSize = 10 每页显示记录数
                if Not IsEmpty(page) then 如果page已经初始化...
                    if Not IsNumeric(page) then 判断page值是否为数字
                        page=1
                    else
                        Page = cint(page) 接收page并化为数字型赋给page变量
                    end if
                    if Page > rs.PageCount then 如果接收的页数大于总页数
                        rs.AbsolutePage = rs.PageCount 设置当前显示页等于最后页
                    elseif Page <= 0 then 如果page小于等于0
                        rs.AbsolutePage = 1 设置当前显示页等于第一页
                    else
                        rs.AbsolutePage = Page 如果大于零,显示当前页等于接收的页数
                    end if
                else
                    rs.AbsolutePage=1
                end if
                Page = rs.AbsolutePage
                For i = 1 to rs.PageSize
                    if rs.EOF then exit for

分页程序:
 程序代码
function pagination(pagecount,pagesize,page,resultcount) 通用分页程序
    Dim query, a, x, temp
    action = "http://" & Request.ServerVariables("HTTP_HOST") & Request.ServerVariables("SCRIPT_NAME")
    query = Split(Request.ServerVariables("QUERY_STRING"), "&")
    For Each x In query
     a = Split(x, "=")
     If StrComp(a(0), "page", vbTextCompare) <> 0 Then
     temp = temp & a(0) & "=" & a(1) & "&"
     End If
    Next   
    Response.Write("<form method=get onsubmit=""document.location = " & action & "?" & temp & "Page=+this.page.value;return false;"">")       
    if page<=1 then
        Response.Write ("[首页] [上一页] ")
    else       
        Response.Write("[<a href=" & action & "?" & temp & "Page=1>首页</a>] ")
        Response.Write("[<a href=" & action & "?" & temp & "Page=" & (Page-1) & ">上一页</a>] ")
    end if

    if page>=pagecount then
        Response.Write ("[下一页] [尾页]")       
    else
        Response.Write("[<a href=" & action & "?" & temp & "Page=" & (Page+1) & ">下一页</a>] ")
        Response.Write("[<a href=" & action & "?" & temp & "Page=" & pagecount & ">尾页</a>]")           
    end if
    Response.Write("[页次:<font color=red>" & page & "</font>/" & pageCount)   
    Response.Write("] [共" & resultcount & "条 <font color=red>"& pagesize & "</font>条/页]")
    Response.Write(" 转到" & "<input name=page size=4 value=" & page & ">" & "页<input type=submit value=go></form>")
End function

要分页的地方直接调用:
 程序代码
<% call pagination(rs.PageCount,rs.pagesize,page,rs.RecordCount) %>

但如果是搜索结果,参数由表单post方式传递过来,分页正常,第一页显示没有问题,但如果点击下一页就会有问题,因为不存在表单了,是直接get,表单post过来的参数都没有了,所以会显示出所有的记录。

最后终于想到办法,用session把那些参数都给保存下来,但新的问题出现了,第一次搜索选择了很多条件,如果又返回到搜索表单重新选择条件搜索,会有之前遗留的session影响搜索结果,所以还要在显示搜索结果显示页面读取数据之前先清空session,具体办法就是在搜索表单中加入隐藏域,显示结果前先判断是否有这样一个隐藏域的值传递,如果有,就清空session,重新生成session,至此,问题搞定。

写的时候代码太乱,就不整理发上来了。本人懒哇~

相关文章