在HTML页面中实现点击数统计 For ASP.Net版! (接近正解)

原创 2004年06月29日 15:28:00
新闻系统中为了减轻服务器的负担。有时需要把数据库内容不是动态读出,
而是写成静态的网页。

以下是写html。更新html,和删除html的代码。
工程中Conn.cs是公共调用的一个类库。(看梦凌早期写的论坛Access版学来的。red_smile.gif

//生成HTML<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

         public static bool WriteFile(string strText,string strContent,string strAuthor,string filename)

         {

              string yy=DateTime.Now.ToString("yyyy");

              string dd=DateTime.Now.ToString("dd");

              string mm=DateTime.Now.ToString("MM");

              string path = HttpContext.Current.Server.MapPath("/news/"+yy.ToString()+"/"+mm.ToString()+"/"+dd.ToString()+"/");

    

              string addtime=DateTime.Now.ToString();

              Encoding code = Encoding.GetEncoding("gb2312");

              // 读取模板文件

              string temp = HttpContext.Current.Server.MapPath("/news/template/template.html");

              StreamReader sr=null;

              StreamWriter sw=null;

              string str=""; 

              try

              {

                   sr = new StreamReader(temp, code);

                   str = sr.ReadToEnd(); // 读取文件

              }

              catch(Exception exp)

              {

                   HttpContext.Current.Response.Write(exp.Message);

                   HttpContext.Current.Response.End();

                   sr.Close();

              } 

  

              string htmlfilename=DateTime.Now.ToString("HHmmss")+".html";

             

              // 替换内容

              // 这时,模板文件已经读入到名称为str的变量中了

              str = str.Replace("$Title$",strText);

              str = str.Replace("$filename$",filename);

              str = str.Replace("$Content$",strContent);

              str = str.Replace("$Author$",strAuthor);

              str = str.Replace("$AddTime$",addtime);

             

 

              // 写文件

              if(!System.IO.Directory.Exists(path))

              {

                   System.IO.Directory.CreateDirectory(path);

                   try

                   {

                       sw = new StreamWriter(path + htmlfilename , false, code);

                       sw.Write(str);

                       sw.Flush();

                   }

                   catch(Exception ex)

                   {

                       HttpContext.Current.Response.Write(ex.Message);

                       HttpContext.Current.Response.End();

                   }

                   finally

                   {

                       sw.Close();

                   }

                   return true;

              }

              else

              {

                   try

                   {

                       sw = new StreamWriter(path + htmlfilename , false, code);

                       sw.Write(str);

                       sw.Flush();

                   }

                   catch(Exception ex)

                   {

                       HttpContext.Current.Response.Write(ex.Message);

                       HttpContext.Current.Response.End();

                   }

                   finally

                   {

                       sw.Close();

                       sr.Close();

                   }

                   return true;

              }

         }

         //修改HTML

         public static bool ModifyFile(string strText,string strContent,string strAuthor,string htmlfilename)

         {

        

              Encoding code = Encoding.GetEncoding("gb2312");

              string path=HttpContext.Current.Server.MapPath("/news/"+htmlfilename);

              // 读取模板文件

              string temp = HttpContext.Current.Server.MapPath("/news/template/template.html");

              StreamReader sr=null;

              StreamWriter sw=null;

              string str="";        

              try

              {

                   sr = new StreamReader(temp, code);

                   str = sr.ReadToEnd(); // 读取文件

              }

              catch(Exception exp)

              {

                   HttpContext.Current.Response.Write(exp.Message);

                   HttpContext.Current.Response.End();

                   sr.Close();

              }

        

        

              string addtime=DateTime.Now.ToString();

              // 替换内容

              // 这时,模板文件已经读入到名称为str的变量中了

              str = str.Replace("$Title$",strText);

              str = str.Replace("$Content$",strContent);

              str = str.Replace("$Author$",strAuthor);

              str = str.Replace("$AddTime$",addtime);

              // 写文件

              try

              {

                   sw = new StreamWriter(path , false, code);

                   sw.Write(str);

                   sw.Flush();

              }

              catch(Exception ex)

              {

                   HttpContext.Current.Response.Write(ex.Message);

                   HttpContext.Current.Response.End();

              }

              finally

              {

                   sw.Close();

                   sr.Close();

              }

              return true;

         }

        

         //删降HTML        

         public static void Delete(string htmlfilename)

         {

              string path = HttpContext.Current.Server.MapPath("/news/"+htmlfilename);

              try

              {                 

                   File.Delete(path);

              }

              catch (Exception ex)

              {

                   HttpContext.Current.Response.Write(ex.Message);

              }

 

         }
关于生成html页请看 ASP.Net生成静态HTML页! 这里不再说了。

生成了静态的html页如何实现点击率呢。这是个难题看来asp版的
http://www.knowsky.com/3439.html 
按照此文的思路。试了试,关于如何读出新增ID的值,这里还是个难点。暂不理会
<SCRIPT src="counter.asp?articleId=<%=#articleId#%>"></SCRIPT >
我换用了数据库中FileName这个存放生成文件名的字段。变成
<script src="../../../../article/counter.aspx?filename=$filename$"></script>
因为生成的html页是按年/月/份/时间.html生成的所以上面用到相对路径。
这样<script src="../../../../article/counter.aspx?filename=2004/05/16/191640.html">
传给counter.aspx的filename参数就是数据库对应的filename字段 根据传过来的filename
然后更新数据库中的click字段,再读出来。
注:此counter.aspx的ASPX文件就只有以下的代码
<%@ Page language="c#" Codebehind="Counter.aspx.cs" AutoEventWireup="false" Inherits="Hover.Article.Counter" %><%@ Page language="c#" Codebehind="Counter.aspx.cs" AutoEventWireup="false" Inherits="Hover.Article.Counter" %>
具体什么原因,请看这里
http://www.cnblogs.com/hover/archive/2004/04/30/8191.aspx
以下是counter.aspx的代码。

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

using System.Data.OleDb;

 

namespace Hover.Article

{

     /// <summary>

     /// Counter 的摘要说明。

     /// </summary>

     public class Counter : System.Web.UI.Page

     {

         protected Hover.Conn obj=new Hover.Conn();

 

         public DataRow dr;

 

         public String filename;

 

         private void Page_Load(object sender, System.EventArgs e)

         {

              // 在此处放置用户代码以初始化页面

              filename=Request.Params["filename"];   

              if (!this.Page.IsPostBack)

              {

                   if (filename!=null)

                   {            

                       UpdateClick(filename);

 

                   }

                   else

                   {

                       Response.Write ("无参数传递错误!");

                   }     

                   this.ReadClick(filename);

              }

 

         }

 

         public void UpdateClick(string filename)

 

         {

 

              try

 

              {

 

                   OleDbDataReader rs=null;

 

                   obj.open1();

 

                   rs=obj.ccmd("select click from news where filename='"+filename+"'").ExecuteReader();

 

                   rs.Read();

 

                   int i = rs.GetInt32(0);

 

                   i++;

 

                   rs.Close();

 

                   obj.ccmd("UPDATE news SET click = "+i.ToString()+" WHERE filename='"+filename+"'").ExecuteNonQuery();

 

                   obj.link.Close();

 

              }

 

              catch(Exception ex)

 

              {

 

                   Response.Write(2+ex.Message );

 

              }

 

         }

 

 

         #region Web 窗体设计器生成的代码

         override protected void OnInit(EventArgs e)

         {

              //

              // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。

              //

              InitializeComponent();

              base.OnInit(e);

         }

        

         /// <summary>

         /// 设计器支持所需的方法 - 不要使用代码编辑器修改

         /// 此方法的内容。

         /// </summary>

         private void InitializeComponent()

         {    

              this.Load += new System.EventHandler(this.Page_Load);

         }

         #endregion

 

         /// <summary>

         /// click

         /// </summary>

         public void ReadClick(string filename)

         {

              string Sql="select click from news where filename='"+filename+"'";

 

              try

 

              {

 

                   obj.open1();

 

                   OleDbDataAdapter da=new OleDbDataAdapter(Sql,obj.link);

 

                   DataSet ds=new DataSet();

 

                   da.Fill(ds,"RecordClick");

 

                   dr = ds.Tables["RecordClick"].Rows[0];

 

                   string filename1=dr["click"].ToString();

                    Response.Write("document.write('"+filename1.ToString()+"')") ;

             

                   obj.link.Close();

 

              }

 

              catch(Exception ex)

 

              {

 

                   Response.Write(ex.Message );

 

              }

 

 

         }

     }

}

 

注:不知道该不该写上版权所有。上面其中的代码。有很多是借鉴前人的代码。
只要大家不认为我是“盗版”就行

http://cnblogs.com/hover/articles/177.aspx 
这个我是改成csharp版了算盗版吗。cry_smile.gif
都是一大堆叙述。看的人不要烦哦。beer_mug.gif 
这是实例:http://bns.23city.com/news/2004/05/16/191640.html
因为asp版的是传递新增加的ID。我这不是所以叫接近正解版!tongue_smile.gif

三种方法统计网页点击次数

  • 2015年05月18日 14:41
  • 5KB
  • 下载

在HTML页面中实现点击数统计 For ASP.Net版! (接近正解)

 在HTML页面中实现点击数统计 For ASP.Net版! (接近正解) 新闻系统中为了减轻服务器的负担。有时需要把数据库内容不是动态读出,而是写成静态的网页。以下是写html。更新html,和删除...
  • sightboy
  • sightboy
  • 2007年05月31日 11:36
  • 415

(转)在HTML页面中实现点击数统计 For ASP.Net版! (接近正解)

新闻系统中为了减轻服务器的负担。有时需要把数据库内容不是动态读出,而是写成静态的网页。以下是写html。更新html,和删除html的代码。工程中Conn.cs是公共调用的一个类库。(看梦凌早期写的论...
  • zss1100
  • zss1100
  • 2007年02月27日 12:53
  • 680

在HTML页面中实现点击数统计

 在文章发布系统中采用服务器端生成静态页面的方法可以有效减轻服务器的负担,特别是对大流量网站非常有效。但是既然生成的是静态页面,生成时是什么样,显示就是什么样了,对于文章常见文章被阅读次数怎么显示呢?...
  • eunsikehuang
  • eunsikehuang
  • 2008年10月17日 22:24
  • 126

为静态化的杰奇加上动态的点击数统计

杰奇静态化后,很多站点就不用它的信息页面了,但是直接用目录页做小说页有一个问题就是,没法统计点击数和没法做评论,评论的稍后再说,点击数其实可以有一个很方便的方法来解决。 通过增加一个javascrip...
  • pangzimin
  • pangzimin
  • 2013年11月12日 14:05
  • 1959

asp.net(c#)对静态页面访问量的统计

访问量的统计方法据说有好几种,我也没都搞明白,有利用ajax的,写js脚本的,我用的这个也不知道是什么方法。在生成的静态页面中有这样一句代码:http://localhost/.NET/NewsFil...
  • zdyguilong
  • zdyguilong
  • 2007年03月20日 11:48
  • 2704

AJAX+Js实现html页面点击数自动更新

html 页代码: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/1999/xhtml">   ...
  • gz2008gz
  • gz2008gz
  • 2009年06月11日 00:28
  • 2126

Jquery AJAX 用于计算点击率(统计)

代码如下:       Demo           function clickImg(){  $.ajax({  type:"post", //提交类型  url...
  • bfboys
  • bfboys
  • 2016年10月21日 10:00
  • 678

解决Django网站的点击次数统计功能

Django的中间类型分为五种: 请求(Request)中间件,视图(View)中间件,模板(Template)中间件,响应(Response)中间件,异常(Exception)中间件. 主要是利用...
  • jk007
  • jk007
  • 2012年11月13日 16:01
  • 1544

asp.net 统计登录的用户数

asp.net显示图片
  • hoho_12
  • hoho_12
  • 2016年04月14日 19:42
  • 925
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在HTML页面中实现点击数统计 For ASP.Net版! (接近正解)
举报原因:
原因补充:

(最多只允许输入30个字)