当浏览文章时,希望在文章下面有一个导航,就是上一篇和下一篇的功能。可从下三张截图看到效果:
要SQL查询语句前,就须把上一篇和下一篇的文章ID找出来,下面的SQL语句有些字段已经省略。
View Code
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:
View Code
<%@ 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:
View Code
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的属性。
View Code
<uc1:ArticleNavigation ID="ArticleNavigation1" runat="server" PrevArticleId='<%# Eval("PrevArticleId")%>'
NextArticleId='<%# Eval("NextArticleId")%>' />
NextArticleId='<%# Eval("NextArticleId")%>' />