當瀏覽文章時,希望在文章下面有一個導航,就是上一篇和下一篇的功能。可從下三張截圖看到效果:
要SQL查詢語句前,就須把上一篇和下一篇的文章ID找出來,下面的SQL語句有些字段已經省略。

SELECT
[
ArticleId
],
[
Subject
],
( SELECT MAX( [ ArticleId ]) FROM [ dbo ]. [ Article ] AS a1 WHERE a1. [ ArticleId ] < a. [ ArticleId ]) AS [ PrevArticleId ],
( SELECT MIN( [ ArticleId ]) FROM [ dbo ]. [ Article ] AS a1 WHERE a1. [ ArticleId ] > a. [ ArticleId ]) AS [ NextArticleId ]
FROM [ dbo ]. [ Article ] AS a
( SELECT MAX( [ ArticleId ]) FROM [ dbo ]. [ Article ] AS a1 WHERE a1. [ ArticleId ] < a. [ ArticleId ]) AS [ PrevArticleId ],
( SELECT MIN( [ ArticleId ]) FROM [ dbo ]. [ Article ] AS a1 WHERE a1. [ ArticleId ] > a. [ ArticleId ]) AS [ NextArticleId ]
FROM [ dbo ]. [ Article ] AS a
執行結果:
數據庫方面完成了,接下來在asp.net實現,可以首先創建一個用戶控件:
ArticleNavigation.ascx:

<%
@ Control Language
=
"
VB
"
AutoEventWireup
=
"
false
"
CodeFile
=
"
ArticleNavigation.ascx.vb
"
Inherits
=
"
SiteControls_ArticleNavigation
"
%>
上一篇: < asp:HyperLink ID ="HyperLinkPrev" runat ="server" Target ="_blank" ></ asp:HyperLink > < br />
下一篇: < asp:HyperLink ID ="HyperLinkNext" runat ="server" Target ="_blank" ></ asp:HyperLink >
上一篇: < asp:HyperLink ID ="HyperLinkPrev" runat ="server" Target ="_blank" ></ asp:HyperLink > < br />
下一篇: < asp:HyperLink ID ="HyperLinkNext" runat ="server" Target ="_blank" ></ asp:HyperLink >
ArticleNavigation.ascx.vb:

Imports System.Data
Imports Insus.NET
Partial Class SiteControls_ArticleNavigation
Inherits System.Web.UI.UserControl
Dim objArticle As New Article()
Private _PrevArticleId As String
Private _NextArticleId As String
Public WriteOnly Property PrevArticleId As String
Set(value As String)
_PrevArticleId = value
End Set
End Property
Public WriteOnly Property NextArticleId As String
Set(value As String)
_NextArticleId = value
End Set
End Property
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
Data_Binding()
End Sub
Private Sub Data_Binding()
If String.IsNullOrEmpty(_PrevArticleId) Then
Me.HyperLinkPrev.Text = " 無 "
Else
Dim objPrevDataRow As DataRow = objArticle.GetArticleByPrimaryKey(_PrevArticleId).Rows( 0)
Me.HyperLinkPrev.Text = objPrevDataRow( " Subject ")
Me.HyperLinkPrev.NavigateUrl = " ~/ArticleView.aspx?ID= " & _PrevArticleId
End If
If String.IsNullOrEmpty(_NextArticleId) Then
Me.HyperLinkNext.Text = " 無 "
Else
Dim objNextDataRow As DataRow = objArticle.GetArticleByPrimaryKey(_NextArticleId).Rows( 0)
Me.HyperLinkNext.Text = objNextDataRow( " Subject ")
Me.HyperLinkNext.NavigateUrl = " ~/ArticleView.aspx?ID= " & _NextArticleId
End If
End Sub
End Class
Imports Insus.NET
Partial Class SiteControls_ArticleNavigation
Inherits System.Web.UI.UserControl
Dim objArticle As New Article()
Private _PrevArticleId As String
Private _NextArticleId As String
Public WriteOnly Property PrevArticleId As String
Set(value As String)
_PrevArticleId = value
End Set
End Property
Public WriteOnly Property NextArticleId As String
Set(value As String)
_NextArticleId = value
End Set
End Property
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
Data_Binding()
End Sub
Private Sub Data_Binding()
If String.IsNullOrEmpty(_PrevArticleId) Then
Me.HyperLinkPrev.Text = " 無 "
Else
Dim objPrevDataRow As DataRow = objArticle.GetArticleByPrimaryKey(_PrevArticleId).Rows( 0)
Me.HyperLinkPrev.Text = objPrevDataRow( " Subject ")
Me.HyperLinkPrev.NavigateUrl = " ~/ArticleView.aspx?ID= " & _PrevArticleId
End If
If String.IsNullOrEmpty(_NextArticleId) Then
Me.HyperLinkNext.Text = " 無 "
Else
Dim objNextDataRow As DataRow = objArticle.GetArticleByPrimaryKey(_NextArticleId).Rows( 0)
Me.HyperLinkNext.Text = objNextDataRow( " Subject ")
Me.HyperLinkNext.NavigateUrl = " ~/ArticleView.aspx?ID= " & _NextArticleId
End If
End Sub
End Class
在文章瀏覽的aspx中,用戶控控件需要傳入前一篇的文章ID和下一篇的文章ID,下面的PrevArticleId和NextArticleId兩個都是用戶控件的public的屬性。

<
uc1:ArticleNavigation
ID
="ArticleNavigation1"
runat
="server"
PrevArticleId
='<%#
Eval("PrevArticleId")%
>'
NextArticleId=' <% # Eval ( " NextArticleId " ) %>' />
NextArticleId=' <% # Eval ( " NextArticleId " ) %>' />