您的位置:首页 > 编程语言 > ASP

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

2007-02-27 12:53 519 查看
新闻系统中为了减轻服务器的负担。有时需要把数据库内容不是动态读出,
而是写成静态的网页。

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



[align=left]//生成HTML页[/align]
[align=left] [/align]
[align=left] public static bool WriteFile(string strText,string strContent,string strAuthor,string filename) [/align]
[align=left] {[/align]
[align=left] string yy=DateTime.Now.ToString("yyyy");[/align]
[align=left] string dd=DateTime.Now.ToString("dd");[/align]
[align=left] string mm=DateTime.Now.ToString("MM");[/align]
[align=left] string path = HttpContext.Current.Server.MapPath("/news/"+yy.ToString()+"/"+mm.ToString()+"/"+dd.ToString()+"/");[/align]
[align=left] [/align]
[align=left] string addtime=DateTime.Now.ToString();[/align]
[align=left] Encoding code = Encoding.GetEncoding("gb2312");[/align]
[align=left] // 读取模板文件[/align]
[align=left] string temp = HttpContext.Current.Server.MapPath("/news/template/template.html");[/align]
[align=left] StreamReader sr=null;[/align]
[align=left] StreamWriter sw=null;[/align]
[align=left] string str=""; [/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] sr = new StreamReader(temp, code);[/align]
[align=left] str = sr.ReadToEnd(); // 读取文件[/align]
[align=left] }[/align]
[align=left] catch(Exception exp)[/align]
[align=left] {[/align]
[align=left] HttpContext.Current.Response.Write(exp.Message);[/align]
[align=left] HttpContext.Current.Response.End();[/align]
[align=left] sr.Close();[/align]
[align=left] } [/align]
[align=left] [/align]
[align=left] string htmlfilename=DateTime.Now.ToString("HHmmss")+".html";[/align]
[align=left] [/align]
[align=left] // 替换内容[/align]
[align=left] // 这时,模板文件已经读入到名称为str的变量中了[/align]
[align=left] str = str.Replace("$Title$",strText);[/align]
[align=left] str = str.Replace("$filename$",filename);[/align]
[align=left] str = str.Replace("$Content$",strContent);[/align]
[align=left] str = str.Replace("$Author$",strAuthor);[/align]
[align=left] str = str.Replace("$AddTime$",addtime);[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] // 写文件[/align]
[align=left] if(!System.IO.Directory.Exists(path))[/align]
[align=left] {[/align]
[align=left] System.IO.Directory.CreateDirectory(path);[/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] sw = new StreamWriter(path + htmlfilename , false, code);[/align]
[align=left] sw.Write(str);[/align]
[align=left] sw.Flush();[/align]
[align=left] }[/align]
[align=left] catch(Exception ex)[/align]
[align=left] {[/align]
[align=left] HttpContext.Current.Response.Write(ex.Message);[/align]
[align=left] HttpContext.Current.Response.End();[/align]
[align=left] }[/align]
[align=left] finally[/align]
[align=left] {[/align]
[align=left] sw.Close();[/align]
[align=left] }[/align]
[align=left] return true;[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] sw = new StreamWriter(path + htmlfilename , false, code);[/align]
[align=left] sw.Write(str);[/align]
[align=left] sw.Flush();[/align]
[align=left] }[/align]
[align=left] catch(Exception ex)[/align]
[align=left] {[/align]
[align=left] HttpContext.Current.Response.Write(ex.Message);[/align]
[align=left] HttpContext.Current.Response.End();[/align]
[align=left] }[/align]
[align=left] finally[/align]
[align=left] {[/align]
[align=left] sw.Close();[/align]
[align=left] sr.Close();[/align]
[align=left] }[/align]
[align=left] return true;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] //修改HTML页[/align]
[align=left] public static bool ModifyFile(string strText,string strContent,string strAuthor,string htmlfilename) [/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] Encoding code = Encoding.GetEncoding("gb2312");[/align]
[align=left] string path=HttpContext.Current.Server.MapPath("/news/"+htmlfilename);[/align]
[align=left] // 读取模板文件[/align]
[align=left] string temp = HttpContext.Current.Server.MapPath("/news/template/template.html");[/align]
[align=left] StreamReader sr=null;[/align]
[align=left] StreamWriter sw=null;[/align]
[align=left] string str=""; [/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] sr = new StreamReader(temp, code);[/align]
[align=left] str = sr.ReadToEnd(); // 读取文件[/align]
[align=left] }[/align]
[align=left] catch(Exception exp)[/align]
[align=left] {[/align]
[align=left] HttpContext.Current.Response.Write(exp.Message);[/align]
[align=left] HttpContext.Current.Response.End();[/align]
[align=left] sr.Close();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] string addtime=DateTime.Now.ToString();[/align]
[align=left] // 替换内容[/align]
[align=left] // 这时,模板文件已经读入到名称为str的变量中了[/align]
[align=left] str = str.Replace("$Title$",strText);[/align]
[align=left] str = str.Replace("$Content$",strContent);[/align]
[align=left] str = str.Replace("$Author$",strAuthor);[/align]
[align=left] str = str.Replace("$AddTime$",addtime);[/align]
[align=left] // 写文件[/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] sw = new StreamWriter(path , false, code);[/align]
[align=left] sw.Write(str);[/align]
[align=left] sw.Flush();[/align]
[align=left] }[/align]
[align=left] catch(Exception ex)[/align]
[align=left] {[/align]
[align=left] HttpContext.Current.Response.Write(ex.Message);[/align]
[align=left] HttpContext.Current.Response.End();[/align]
[align=left] }[/align]
[align=left] finally[/align]
[align=left] {[/align]
[align=left] sw.Close();[/align]
[align=left] sr.Close();[/align]
[align=left] }[/align]
[align=left] return true;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] //删降HTML [/align]
[align=left] public static void Delete(string htmlfilename)[/align]
[align=left] {[/align]
[align=left] string path = HttpContext.Current.Server.MapPath("/news/"+htmlfilename);[/align]
[align=left] try [/align]
[align=left] { [/align]
[align=left] File.Delete(path);[/align]
[align=left] }[/align]
[align=left] catch (Exception ex) [/align]
[align=left] {[/align]
[align=left] HttpContext.Current.Response.Write(ex.Message);[/align]
[align=left] }[/align]
[align=left] [/align]
}
关于生成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" %>
具体什么原因,请看这里http://www.cnblogs.com/hover/archive/2004/04/30/8191.aspx
以下是counter.aspx的代码。

[align=left]using System;[/align]
[align=left]using System.Collections;[/align]
[align=left]using System.ComponentModel;[/align]
[align=left]using System.Data;[/align]
[align=left]using System.Drawing;[/align]
[align=left]using System.Web;[/align]
[align=left]using System.Web.SessionState;[/align]
[align=left]using System.Web.UI;[/align]
[align=left]using System.Web.UI.WebControls;[/align]
[align=left]using System.Web.UI.HtmlControls;[/align]
[align=left]using System.Data.OleDb;[/align]
[align=left] [/align]
[align=left]namespace Hover.Article[/align]
[align=left]{[/align]
[align=left] ///<summary>[/align]
[align=left] /// Counter 的摘要说明。[/align]
[align=left] ///</summary>[/align]
[align=left] public class Counter : System.Web.UI.Page[/align]
[align=left] {[/align]
[align=left] protected Hover.Conn obj=new Hover.Conn();[/align]
[align=left] [/align]
[align=left] public DataRow dr;[/align]
[align=left] [/align]
[align=left] public String filename;[/align]
[align=left] [/align]
[align=left] private void Page_Load(object sender, System.EventArgs e)[/align]
[align=left] {[/align]
[align=left] // 在此处放置用户代码以初始化页面[/align]
[align=left] filename=Request.Params["filename"]; [/align]
[align=left] if (!this.Page.IsPostBack)[/align]
[align=left] {[/align]
[align=left] if (filename!=null)[/align]
[align=left] { [/align]
[align=left] UpdateClick(filename); [/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] Response.Write ("无参数传递错误!");[/align]
[align=left] } [/align]
[align=left] this.ReadClick(filename);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] public void UpdateClick(string filename)[/align]
[align=left] [/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] try[/align]
[align=left] [/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] OleDbDataReader rs=null;[/align]
[align=left] [/align]
[align=left] obj.open1();[/align]
[align=left] [/align]
[align=left] rs=obj.ccmd("select click from news where filename='"+filename+"'").ExecuteReader();[/align]
[align=left] [/align]
[align=left] rs.Read();[/align]
[align=left] [/align]
[align=left] int i = rs.GetInt32(0);[/align]
[align=left] [/align]
[align=left] i++;[/align]
[align=left] [/align]
[align=left] rs.Close();[/align]
[align=left] [/align]
[align=left] obj.ccmd("UPDATE news SET click = "+i.ToString()+" WHERE filename='"+filename+"'").ExecuteNonQuery();[/align]
[align=left] [/align]
[align=left] obj.link.Close();[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] catch(Exception ex)[/align]
[align=left] [/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] Response.Write(2+ex.Message );[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] #region Web 窗体设计器生成的代码[/align]
[align=left] override protected void OnInit(EventArgs e)[/align]
[align=left] {[/align]
[align=left] //[/align]
[align=left] // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。[/align]
[align=left] //[/align]
[align=left] InitializeComponent();[/align]
[align=left] base.OnInit(e);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] ///设计器支持所需的方法 - 不要使用代码编辑器修改[/align]
[align=left] ///此方法的内容。[/align]
[align=left] ///</summary>[/align]
[align=left] private void InitializeComponent()[/align]
[align=left] { [/align]
[align=left] this.Load += new System.EventHandler(this.Page_Load);[/align]
[align=left] }[/align]
[align=left] #endregion[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] ///读click数[/align]
[align=left] ///</summary>[/align]
[align=left] public void ReadClick(string filename)[/align]
[align=left] {[/align]
[align=left] string Sql="select click from news where filename='"+filename+"'";[/align]
[align=left] [/align]
[align=left] try[/align]
[align=left] [/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] obj.open1();[/align]
[align=left] [/align]
[align=left] OleDbDataAdapter da=new OleDbDataAdapter(Sql,obj.link);[/align]
[align=left] [/align]
[align=left] DataSet ds=new DataSet();[/align]
[align=left] [/align]
[align=left] da.Fill(ds,"RecordClick");[/align]
[align=left] [/align]
[align=left] dr = ds.Tables["RecordClick"].Rows[0];[/align]
[align=left] [/align]
[align=left] string filename1=dr["click"].ToString();[/align]
[align=left] Response.Write("document.write('"+filename1.ToString()+"')") ;[/align]
[align=left] [/align]
[align=left] obj.link.Close();[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] catch(Exception ex)[/align]
[align=left] [/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] Response.Write(ex.Message );[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]}[/align]

注:不知道该不该写上版权所有。上面其中的代码。有很多是借鉴前人的代码。
只要大家不认为我是“盗版”就行。
http://cnblogs.com/hover/articles/177.aspx 
这个我是改成csharp版了算盗版吗。


都是一大堆叙述。看的人不要烦哦。


这是实例:http://bns.23city.com/news/2004/05/16/191640.html
因为asp版的是传递新增加的ID。我这不是所以叫接近正解版!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: