用模版页的形式生成静态页

这个功能在学校做过,却因为好久没用,又不太记得,所以又拿出来重写一遍加深一下映像,也希望能给一些人一些帮助。

一般产品详细,新闻文章用的较多,我就以新闻中心为例:

首先,创建一个简单模版页: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>&nbsp;<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页面

 

 

posted on 2012-12-20 13:18  Mr.cheng  阅读(185)  评论(0编辑  收藏  举报