首先声明一下,这个静态页的生成是用了Eric兄的辛苦劳动成果:EFPLatform.CodeGenerator。在这里,先忠心感谢Eric兄,辛苦了!!
静态页的生成,多种因素,有着诸多不同的实现方式。孰优孰劣,适合自己的最好,这里不必妄言。静态页生成后,又伴之而来其他的问题,如:静态页的生成,生成后增加访问计数,异步添加评论等等。关于如何生成静态页,有了Eric兄,我在这也就没有必要赘述了。
下面谈谈生成静态页之后出来的问题:
限于篇幅,这次先来两个小模块:1.增加访问计数 2.生成首页
1、生成好的静态页增加访问计数:
我的做法是建立一个增加引用计数的动态页,这个页接受参数,然后根据参数增加访问计数。在静态页里用<script src="/Module_News/Increase.aspx?id=ID编号" type="text/javascript"></script>
调用这个页增加访问计数
cs代码:
2 {
3 if (Request.QueryString["id"] != null)
4 {
5 Module_News mnMain = new Module_News();
6 mnMain.Module_News_FluxIncrease(Request.QueryString["id"].ToString());
7 //Response.Redirect(string.Format(@"/Html/News/3/{0}.html", Request.QueryString["code"].ToString()));
8 }
9 else
10 {
11 Response.Write("您请求的数据不存在");
12 }
13 }
注意:页面元素为空;另外还可以换成ashx文件。
2、首页生成静态页
关于首页,我之前是用的缓存。但限于自身的技术水平,缓存带来的效果并不理想。且不知为什么首页的个别链接还会出错。所以,决定用静态页替代缓存。这里的首页静态页我没有用模板生成,毕竟首页的东西太多,这样做太繁杂。
这里取了个巧,重写Render:
代码:
2 {
3 System.IO.StringWriter html = new System.IO.StringWriter();
4 System.Web.UI.HtmlTextWriter tw = new HtmlTextWriter(html);
5 base.Render(tw);
6 System.IO.StreamWriter sw = new System.IO.StreamWriter(Server.MapPath("index.html"), false, System.Text.Encoding.Default);
7 sw.Write(html.ToString());
8 sw.Close();
9 tw.Close();
10 //Response.Write("页面生成成功!");
11 }
好了,页面生成了,问题又来了,怎么更新?是隔一段时间生成一次,还是有更新就重新生成...
我的做法是让用户自己更新。在页里加上下面这个
<script language="javascript" type="text/javascript">
//请求Default.aspx,调用Render重新生成首页静态页
document.write('<script type="text/javascript" src="/Default.aspx"><'+'/script>');
</script>
这样一来,用户访问一次生成好的静态页,就调用一次首页,然后重新生成静态页。