完美解决asp.net页面刷新一次,阅读数就增加一次的问题

技术教程2019/11/13 15:40:49阅读:1384

很多博客、论坛或者新闻网站上都可以阅读文章,文章上面很多都会有阅读量。

最近用asp.net做项目的时候发现这个不起眼的小功能却不好实现。

首先是实现的逻辑。因为登录的用户和非登录的用户都能看文章,所以不能从用户身上下手,而是从文章本身考虑。网上大部分教程都是利用cookie和ip做记录来实现,但是这样实现起来就特别麻烦。既然是文章固有的属性,那么在数据库的文章表中就应该有这个字段。

所以首先我们要在数据库的文章表中添加一个阅读数字段。记得设置默认值为1,新添加的文章阅读数会为null引起异常。


数据库添加阅读数字段
有了这个记录阅读数的字段,我们只需要在文章页面加载的时候让这个字段的值加1就行了。在页面加载事件中对这个字段进行操作即可。

article.readCount += 1;

MySqlHelper.ExecuteSql("update article set readcount='" + article.readCount + "' where id='" + id + "'");

虽然这样实现了加1操作,但是现在只要页面一刷新,页面加载事件就会被触发,便会执行加1操作,显然不符合实际需求。我们实际上是只需要在页面第一次打开的时候才让阅读数加1的。


这个时候怎么解决这个问题呢?既然我们需要在页面第一次打开的时候才进行操作,那么一个文章打开的时候什么是唯一的呢,肯定有人说文章id是唯一的,但是,id虽然唯一但是不是可变的唯一,我希望的是第一次打开后就能够带给我一个信息说:这个文章是第一次打开的哦。

那么怎么传这个信息呢?第一次打开的时候用session行不行?不行,因为session在全局都起作用,看其他的文章就会误判了。

这个时候,我想到的是页面的url参数。每个文章页面打开的时候,都会用get方式从url传递一个id参数作为显示文章的查询条件,每次刷新页面的时候,参数就会用到,那么这个时候,如果我再加一个参数会如何?是不是就有一个标志了哈哈。像这样,比如第一次打开的时候页面url是这样:view.aspx?id=1

那么在第一次打开的时候我就改变这个url,随便再加一个参数,比如这样:view.aspx?id=1&again=1

if (Request.QueryString["again"] == null)

{

//阅读数加1

article.readCount += 1;

MySqlHelper.ExecuteSql("update article set readcount='" + article.readCount + "' where id='" + id + "'");

Response.Write("<script>window.location.href='" + Request.Url + "&again=1';</script>");

}

这样刷新的时候并不会影响到id的使用,还多了一个sign参数可以判断是否是第一次打开,在后台里面通过判断again参数的有无就可以判断文章是点击的还是刷新的。完美解决了刷新页面引起的阅读数加1的问题。

本文系网站原创,转载请注明文章链接地址