Sampson-Li
Sampson.Li学习经验总结博客 学历代表过去,能力代表现在.学习力代表未来!
 相信大家都遇到过把web网站生成html发不到网上.也很好奇一些cms上都有这个功能,其实很简单

大体思路就是:在你的后台,做一html页面生成器.点击时.循环web目录下的aspx文件(这一点应该不难实现).将他们全部生成html.这就是阻碍大家的路障.下面简单介绍一个demo 

当然也可以做的跟cms一样,后台可视化管理模板页.其原理只不过把模板html读到编辑器里.然后定义一些标签来读取数据.(本人做了一个bayyter.game的cms就是用的这种方法,每个游戏专题只需要美工写页面,插入标签就OK.个人感觉速度还很快.这个站放在国外.所以要上vpn)  

  1方法一:根据模板生成,保持在html文件夹中  
  2 思路分析:  
  3 1.写一个自定义的HTM模板  其中需要替换的地方用$value$这样  
  4 包含起来    
  5 2.生成页面的ASPX中,用StreamReader读取HTM模板,用REPLACE  
  6 替换$value$    
  7 3.把完成的字符串用StreamWriter输出  
  8 参考代码如下:  
  9 1)定义模板emplate.htm  
 10 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
 11 <html xmlns="http://www.w3.org/1999/xhtml" >  
 12 <head>  
 13     <title> $title$ 生成静态页的Demo|-51aspx.com</title>  
 14     <style type="text/css">  
 15 <!--  
 16 .STYLE1 {  
 17 font-size: 16px;  
 18 font-weight: bold;  
 19 }  
 20 -->  
 21     </style>  
 22 </head>  
 23 <body>  
 24 <br />  
 25 <br />  
 26 <table width="100%" border="0" bgcolor="#339900">  
 27   <tr>  
 28     <td height="34" align="center" bgcolor="#FFFFFF"><span class="STYLE1">$title$ </span></td>  
 29   </tr>  
 30   <tr>  
 31     <td height="42" bgcolor="#FFFFFF"><br />  
 32       <br />  
 33     内容:$content$ </td>  
 34   </tr>  
 35 </table>  
 36 <a href="#" target="_blank">版权所有</a>  
 37 </body>  
 38 </html>  
 39 2)在Default.aspx页面的按扭的事件处理中写如下代码:  
 40 //源码是替换掉模板中的特征字符  
 41   string mbPath = Server.MapPath("template.htm");  
 42   Encoding code = Encoding.GetEncoding("gb2312");  
 43   StreamReader sr = null;  
 44   StreamWriter sw = null;  
 45   string str = null;  
 46   //读取  
 47   try  
 48   {  
 49   sr = new StreamReader(mbPath, code);  
 50   str = sr.ReadToEnd();  
 51   }  
 52   catch (Exception ex)  
 53   {  
 54   throw ex;  
 55   }  
 56   finally  
 57   {  
 58   sr.Close();  
 59   }  
 60   //根据时间自动重命名,扩展名也可以自行修改  
 61   string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".htm";  
 62   str = str.Replace("$title{1}quot;, txtTitle.Text);//替换Title  
 63   str = str.Replace("$content{1}quot;, txtContent.Text);//替换content  
 64   //生成静态文件  
 65   try  
 66   {  
 67   sw = new StreamWriter(Server.MapPath("htm/") + fileName, false, code);  
 68   sw.Write(str);  
 69   sw.Flush();  
 70   }  
 71   catch (Exception ex)  
 72   {  
 73   throw ex;  
 74   }  
 75   finally  
 76   {  
 77   sw.Close();  
 78   Response.Write("恭喜<a href=htm/" + fileName + " target=_blank>" + fileName + "</a>已经生成,保存在htm文件夹下!");  
 79   }  
 80   
 81   
 82 方法二:根据Url地址生成静态页保持  
 83 思路分析:  
 84 直接将做好的动态页面翻译成静态页面,所以生成的内容不够灵活  
 85 参考代码:  
 86 //根据Url地址生成静态页保持  
 87 protected void Button2_Click(object sender, EventArgs e)  
 88 {  
 89   Encoding code = Encoding.GetEncoding("utf-8");  
 90             StreamReader sr = null;  
 91             StreamWriter sw = null;  
 92             string str = null;  
 93             //读取远程路径  
 94             WebRequest temp = WebRequest.Create(txtUrl.Text.Trim());  
 95             WebResponse myTemp = temp.GetResponse();  
 96             sr = new StreamReader(myTemp.GetResponseStream(), code);  
 97             //读取  
 98             try  
 99             {  
100                 sr = new StreamReader(myTemp.GetResponseStream(), code);  
101                 str = sr.ReadToEnd();  
102             }  
103             catch (Exception ex)  
104             {  
105                 throw ex;  
106             }  
107             finally  
108             {  
109                 sr.Close();  
110             }  
111             string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".htm";  
112             //写入  
113             try  
114             {  
115                 sw = new StreamWriter(Server.MapPath("htm/") + fileName, false, code);  
116                 sw.Write(str);  
117                 sw.Flush();  
118             }  
119             catch (Exception ex)  
120             {  
121                 throw ex;  
122             }  
123             finally  
124             {  
125                 sw.Close();  
126                 Response.Write("恭喜<a href=htm/" + fileName + " target=_blank>" + fileName + "</a>已经生成,保存在htm文件夹下!");  
127             }  
128         }   

posted on 2011-11-03 14:51  Sampson  阅读(4851)  评论(3编辑  收藏  举报