问关于页面中上一条记录与下一条记录的显示问题

jornchangzheng 2008-09-18 05:29:02
比如页面有一篇文章,我看完以后可以点击看下一篇,也可以点击上一篇。
我通过sql语句“select top 1 * from xxxxx”,和viewstate实现了,
点击多了还出现那个“禁止回发或回调”错误
刷新一下就没事了,不定时的出现这种错误,虽无大碍,提示加入那句 “xxx=true”,但是加后还是那样
这是怎么回事啊?

还有我觉得这种方法很烂,我总觉得有更好的方法的,求那位高人指教,希望详细点的
...全文
198 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
chouto 2008-09-19
  • 打赏
  • 举报
回复
这就跟分页一样的

用row_number()给记录排个行号rownum,上一篇就是rownum-1,下一篇就是rownum+1,根据行号读取记录(第一条和最后一条做下判断)
JeffChung 2008-09-19
  • 打赏
  • 举报
回复
1.你的什么错误没描述清楚。谁知道你的xxx=true是什么意思呢?

2.关于有什么好方法实现上一条下一条的,9楼的方法就很好啊,简单有效,又不用管什么viewstate
紫气东来_999 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 winner2050 的回复:]
超级简单。


select Max(ID) from T where ID <5
select Min(ID) from T where ID>5
[/Quote]

GOOD
jornchangzheng 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 winner2050 的回复:]
超级简单。


select Max(ID) from T where ID <5
select Min(ID) from T where ID>5
[/Quote]
上一条下一条这些语句是必须的啊,那不是还要用viewstate吗
jornchangzheng 2008-09-18
  • 打赏
  • 举报
回复
大家没有回答我的问题啊
winner2050 2008-09-18
  • 打赏
  • 举报
回复
超级简单。


select Max(ID) from T where ID<5
select Min(ID) from T where ID>5
tootto 2008-09-18
  • 打赏
  • 举报
回复
通常设计数据库的时候主键一定为数值型,否则在join表的时候会很麻烦。

你所看到的CSDN的ID形式不一定是表的主键,可能是经过某种转换或HASH的值,也可能是表是这样结构:ID(int pk), UniqueId(nvarchar(xxx)你看到的ID), xxxxx, xxxx

如果ID确实不是数值型,用SQL SERVER 2005可以给表强型加入行标做为数值型ID, 下面写一个很简单的存储过程:

create procedure dbo.Article_Select
(
@inRowId int
)
as
begin

declare @newArticleTable table
(
RowId int,
title nvarchar(6000),
date datetime,
xxxx xxxxx
)

declare @maxRowId int

insert into @newArticleTable
select row_number() over (order by ANYCOLUMN ) as RowId,
title,
date,
xxxx
from ArticleTable

select @maxRowId = max(RowId) from @newArticleTable

select RowId, title, date, xxxx, @maxRowId from @newArticleTable
where RowId = @inRowId

end
go

存储过程返回给你的内容包括当前的ROWID和最大的maxRowId, 在程序中对比它们,控制RowID, 最小值为1,最大值为maxRowId,
点‘前一篇’ RowID - 1, '下一篇' 则加1;也可根据存储过程返回的 ROWID 和 MAXROWID 决定是否继续显示‘前一篇’或‘下一篇’。


yuchong1984 2008-09-18
  • 打赏
  • 举报
回复
向你学习!
shulei521 2008-09-18
  • 打赏
  • 举报
回复
。。。。。。。。。。。。。。。。。
kong521 2008-09-18
  • 打赏
  • 举报
回复
自己没做过
帮顶下
以后可能会用到
lovehongyun 2008-09-18
  • 打赏
  • 举报
回复
你没有一个表示顺序的字段吗?

蝶恋花雨 2008-09-18
  • 打赏
  • 举报
回复
 #region// 取出上一篇下一篇文章
public void BindNextUp()
{
showid = Convert.ToString(SQLUtil.CutIntFromStr(Request["showid"]));
if (showid != null && showid != "")
{
sqls.Sys_Paras.Add(new SqlParameter("@logid", SQLUtil.FilerSql(showid)));
DataTable dtnextup = new DataTable();
string strNextUp = "select * from (select top 1 logid,title from dbo.space_MyReleased where logid>case when (select count(*) ";
strNextUp += " from dbo.space_MyReleased where state=1 and delstate=0 and logid > @logid) > 0 then @logid else @logid - 1 end order by logid)as a union ";
strNextUp += " select * from (select top 1 logid,title from dbo.space_MyReleased where state=1 and delstate=0 and logid< case when ";
strNextUp += " (select count(*) from dbo.space_MyReleased where state=1 and delstate=0 and logid < @logid) > 0 then @logid else @logid + 1 end order by logid desc) as b ";
sqls.Fill_DT(strNextUp, dtnextup);
if (dtnextup.Rows.Count > 0)
{
this.up.Text = "<a class='MsHref1' href=MyLogLeft.aspx?showid=" + dtnextup.Rows[0]["logid"].ToString() + ">" + dtnextup.Rows[0]["title"].ToString() + "</a>";
for (int i = 0; i < dtnextup.Rows.Count; i++)
{
int upid = Convert.ToInt32(dtnextup.Rows[i]["logid"].ToString());
//判断传递的ID大小来显示上一篇下一篇
if (upid == Convert.ToInt32(SQLUtil.FilerSql(showid)))//查询ID相等的
{
this.netx.Text = "<a class='MsHref1' href=MyLogLeft.aspx?showid=" + dtnextup.Rows[i]["logid"].ToString() + ">" + dtnextup.Rows[i]["title"].ToString() + "</a>";
}
else if (upid < Convert.ToInt32(showid))//查出ID小于ShowID的
{
this.up.Text = "<a class='MsHref1' href=MyLogLeft.aspx?showid=" + dtnextup.Rows[i]["logid"].ToString() + ">" + dtnextup.Rows[i]["title"].ToString() + "</a>";
}
else
{
this.netx.Text = "<a class='MsHref1' href=MyLogLeft.aspx?showid=" + dtnextup.Rows[i]["logid"].ToString() + ">" + dtnextup.Rows[i]["title"].ToString() + "</a>";
}
}
} sqls.Sys_Paras.Clear();
}
}
#endregion

<!--上一篇下一篇-->
<div class="MLDiv3" >
<div style="float: left" >   « 上一篇:【<asp:Label ID="up" runat="server"/>】</div>
<div align="right" >下一篇:【<asp:Label ID="netx" runat="server" ></asp:Label> 】  </div>
</div>

判断了最后一条。和最前面一条。时候点击上一条还是最前面。或最后一条。
cteddy 2008-09-18
  • 打赏
  • 举报
回复
我加问一句。如果ID是unique类型的
就像CSDN这样的67c05ec9-365a-43ff-ae44-375fef618b75
怎么办尼?
是数值的话是很好做的
xian_yun80 2008-09-18
  • 打赏
  • 举报
回复
你可以取出当前页的标识性的ID,然后取出一条大于或小于当前ID的数据不是可以了吗

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧