用模版页的形式生成静态页
这个功能在学校做过,却因为好久没用,又不太记得,所以又拿出来重写一遍加深一下映像,也希望能给一些人一些帮助。
一般产品详细,新闻文章用的较多,我就以新闻中心为例:
首先,创建一个简单模版页:newPage.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
ul,li{ list-style:none; margin:0; padding:0;}
#div{ width:900px; margin:0 auto;}
#top{ width:100%; background-color:Gray; display:inline-block;}
#left{ width:75%; min-height:800px; display:inline-block; float:left;}
#right{ width:25%;min-height:800px; display:inline-block; background-color:Gray;}
#main{ width:95%; margin:0 auto;}
</style>
</head>
<body>
<div id="div">
<div id="top">
<h1>新闻中心</h1>
</div>
<div id="left">
<div id="main">
<h1 style=" text-align:center;">[title]</h1>
<p> <label style=" width:500px; display:inline-block;">作者:[author]</label><span>时间:[time]</span></p>
<div>[Content]</div>
</div>
</div>
<div id="right">
</div>
</div>
</body>
</html>
页面效果:

然后,新建一个类(让它继承IHttpHandler,并实现该接口的方法):
public void ProcessRequest(HttpContext context)
{
//例: url="http://localhost:5328/new_id.com"
int str = context.Request.Path.LastIndexOf("_");
int end = context.Request.Path.LastIndexOf(".");
string id = context.Request.Path.Substring(str+1,end-str-1);//获取url中的id
Contents con = new ContentsManager().GetContentsByID(Convert.ToInt32(id));//获取新闻内容
string newsPath = context.Server.MapPath("~/FristPage/NewsContent/new_" + id + ".html");
context.Application.Lock();
if (!File.Exists(newsPath))
{
string modlePath = context.Server.MapPath("~/FristPage/NewDetail.htm");//获得模版的路径
string template = null;
using (StreamReader strRead = new StreamReader(modlePath))
{
template = strRead.ReadToEnd();//读取模版页的所有内容
}
string html = template.Replace("[author]", con.AddAuthor)
.Replace("[title]", con.CTitle)
.Replace("[time]", con.AddTime.ToString("yyyy-MM-dd"))
.Replace("[Content]", con.CContents);
using (StreamWriter strWrite = new StreamWriter(newsPath))
{
strWrite.Write(html);//写入静态化页面内容
}
}
context.Application.UnLock();
context.Server.Execute("~/FristPage/NewsContent/new_" + id + ".html");
}
最后,需要在配置文件中配置一下<httpHandlers>标签:
<system.web> <httpHandlers> <add verb="*" path="~/FristPage/NewsContent/*.html" type="Enterprise.axhx.CreateNewHandler"/> </httpHandlers> </system.web>
"~/FristPage/NewsContent/new_1.html"是触发IHttpHandler去执行axhx,如果已经存在了读取,没有时,创建html页面

浙公网安备 33010602011771号