如何在 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)%>"> <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 值的方法。
我正在尝试在单击“返回”或“下一步”时增加或减少变量 (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)%>"> <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 值的方法。