zoukankan      html  css  js  c++  java
  • 文章的上一篇和下一篇导航

    当浏览文章时,希望在文章下面有一个导航,就是上一篇和下一篇的功能。可从下三张截图看到效果:

    要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

    执行结果:

    数据库方面完成了,接下来在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>

    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

    在文章浏览的aspx中,用户控控件需要传入前一篇的文章ID和下一篇的文章ID,下面的PrevArticleIdNextArticleId两个都是用户控件的public的属性。 

    View Code
     <uc1:ArticleNavigation ID="ArticleNavigation1" runat="server" PrevArticleId='<%# Eval("PrevArticleId")%>'
                    NextArticleId='<%Eval("NextArticleId")%>' />
  • 相关阅读:
    批量新增百万条数据 十百万条数据
    sqlserver 组内排序
    EF ++属性会更新实体
    Entity Framework Core: A second operation started on this context before a previous operation completed
    abp Cannot access a disposed object. A common cause of this error is disposing
    abp xunit Can not register IHostingEnvironment. It should be a non-abstract class. If not, it should be registered before.”
    hangfire enqueued but not processing(hangfire 定时任务入队列但不执行)
    EF 更新实体 The instance of entity type 'BabyEvent' cannot be tracked because another instance
    datatable to entiy list 不支持可空类型和枚举类型
    webapi 设置不显示接口到swaggerUI
  • 原文地址:https://www.cnblogs.com/insus/p/2404288.html
Copyright © 2011-2022 走看看