如何在 ASP Classic 中调用子程序进行分页

How to call subroutine for pagination in ASP Classic

我正在尝试在单击“返回”或“下一步”时增加或减少变量 (tranquerypage),然后使用变量的新值重新加载当前页面,然后可以在加载页面时查询该值。但是,我尝试了一些方法,作为 ASP 经典的新手,我在让它正常工作时遇到了问题。 vbscript 方法一直没有工作。这是我目前所拥有的 -

    <%
tranquerypage = session("tranquerypage")
if session("tranquerypage") = "" then 
session("tranquerypage") = 1 
end if
%>

<INPUT TYPE=button Name=temp Value="Back" target="_self" onClick="<%call back(tranquerypage)%>">&nbsp;&nbsp;<INPUT TYPE=button Name=temp Value="Next" target="_self" onClick="<%call nextpage(tranquerypage)%>">
</td>
</tr>

    <%
sub back(tranquerypage)
tranquerypage = tranquerypage - 1 
end sub

sub nextpage(tranquerypage)
tranquerypage = tranquerypage + 1
end sub
%>

HTML/JavaScript 代码在浏览器中运行,ASP 代码在服务器上运行,很可能在两台完全不同的计算机上。

此外,浏览器运行 JavaScript,这与 ASP 完全不兼容。

这意味着一件事:您不能从 HTML 调用任何 ASP 函数。 故事结束。


与网络服务器通信的接口是:HTTP 消息。换句话说,只有请求 URLs 才能通知服务器客户端的操作。

因此,您需要做的第一件事是确定您希望如何将您的意图传达给服务器,即 URL 应该是什么样子。

怎么样:

http://yourserver.com/yourpage.asp?page=next
http://yourserver.com/yourpage.asp?page=prev
http://yourserver.com/yourpage.asp?page=5

现在我们决定 URL,让 ASP 页面理解它。 URL 个参数在 Request 集合中可用。

<% 
Option Explicit ' never work without Option Explicit

Dim page, requestedPage, MAX_PAGE

requestedPage = LCase(Request("page"))
MAX_PAGE = 10

If requestedPage = "next" Then
   page = NextPage()
ElseIf requestedPage = "prev" Then
   page = PrevPage()
Else
   page = SetPage(requestedPage)
End
%>

现在您的 ASP 代码知道如何处理 "page" URL 参数。

让我们定义执行页面实际切换的函数。

<% 
Function CurrentPage
    If IsNumeric(Session("page")) Then
        CurrentPage = Session("page")
    Else
        CurrentPage = 1
    End If 
End Function

Function NextPage
    NextPage = SetPage(CurrentPage() + 1)
End Function

Function PrevPage
    PrevPage = SetPage(CurrentPage() - 1)
End Function

Function SetPage(newPage)
    ' range check!
    If Not IsNumeric(newPage) Then
        Session("page") = 1
    ElseIf page < 1 Then
        Session("page") = 1
    ElseIf page > MAX_PAGE Then
        Session("page") = MAX_PAGE
    Else
        Session("page") = Int(newPage)
    EndIf
    SetPage = Session("page")
End Function
%>  

向服务器 ("to request an URL") 发送 HTTP 消息的最简单方法是使用 link。所以你的 HTML 可能看起来像这样:

<a href="/yourpage.asp?page=prev">Previous Page</a>
<a href="/yourpage.asp?page=5">Page 5</a>
<a href="/yourpage.asp?page=next">Next Page</a>

您的剩余任务:

  • 当然是输出实际的页面内容。
  • 弄清楚如何输出比 Page 5 更多的 link。
  • 弄清楚如何将 MAX_PAGE 设置为比 10 更合适的值。
  • 了解如何使用不同的页面大小。
  • 最后:考虑放弃整个 "current"/"next"/"prev" 页面概念。每页数据都可以通过其 URL 进行唯一寻址。如果您在 http://yourserver.com/yourpage.asp?page=5,它自然会遵循上一页和下一页 - 4 和 6。想出一种完全通过 URL 参数进行页面切换且没有任何会话或 cookie 值的方法。