生成的静态页面截图: 页面模板截图: 页面代码: <!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>temp</title> <link href="/css/com.css" mce_href="css/com.css" rel="stylesheet" type="text/css" /> <link href="/css/lst.css" mce_href="css/lst.css" rel="stylesheet" type="text/css" /> <mce:script src="/js/com.js" mce_src="js/com.js" type="text/javascript"></mce:script> </head> <body> <div id="container"> {top} <table border="0" cellpadding="0" cellspacing="0" width="956" align="center"> <tr> <td valign="top"> <table border="0" cellpadding="0" cellspacing="0" width="720"> <tr> <td width="10"> <img src="/images/index/class_left.gif" mce_src="images/index/class_left.gif" /> </td> <td background="/images/index/class_bg.gif" class="navbar"> {sitemap} </td> <td width="8"> <img src="/images/index/class_right.gif" mce_src="images/index/class_right.gif" /> </td> </tr> </table> <div id="sml_list_content"> {sml_list_content} <div class="pagger"> {pageer} </div> </div> </td> <td align="right" valign="top"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td background="/images/index/box_title.png" height="31" align="left"> <div class="class_box_title"> 最近更新 </div> </td> </tr> <tr> <td> <div class="class_box"> {rightblock_new} </div> </td> </tr> </table> <table border="0" cellpadding="0" cellspacing="0" style="margin-top: 5px" mce_style="margin-top: 5px"> <tr> <td background="/images/index/box_title.png" height="31" align="left"> <div class="class_box_title"> 热点关注 </div> </td> </tr> <tr> <td> <div class="class_box"> {rightblock_hot} </div> </td> </tr> </table> <table border="0" cellpadding="0" cellspacing="0" style="margin-top: 5px" mce_style="margin-top: 5px"> <tr> <td background="/images/index/box_title.png" height="31" align="left"> <div class="class_box_title"> 随机推荐 </div> </td> </tr> <tr> <td> <div class="class_box"> {rightblock_rand} </div> </td> </tr> </table> </td> </tr> </table> {foot} </div> </body> </html> 业务逻辑层代码 IO.cs: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace Bll.BuilderHtml { public class IO { /// <summary> /// /// </summary> /// <param name="filename">写从根文件夹开始的相对路径</param> /// <param name="encode"></param> /// <returns></returns> public static string Read(string filename, Encoding encoding) { using (StreamReader reader = new StreamReader(Util.Cfg.AppPhyPath + filename, encoding)) { return reader.ReadToEnd(); } } /// <summary> /// /// </summary> /// <param name="filename">写从根文件夹开始的相对路径</param> /// <returns></returns> public static string Read(string filename) { return Read(filename, Encoding.UTF8); } /// <summary> /// /// </summary> /// <param name="filename">写从根文件夹开始的相对路径</param> /// <param name="content"></param> /// <param name="encoding"></param> public static void Write(string filename, string content, Encoding encoding) { filename = filename.Replace("/", "//"); // youxiujiaoan/xiaoxueyingyujiaoan/aaaaa-3.htm string[] patharr = filename.Split('//'); string path = Util.Cfg.AppPhyPath; for (int i = 0; i < patharr.Length - 1; i++) { path = path + patharr[i] + "//"; if (Directory.Exists(path) == false) Directory.CreateDirectory(path); } using (StreamWriter writer = new StreamWriter(Util.Cfg.AppPhyPath + filename, false, encoding)) { writer.Write(content); } } /// <summary> /// /// </summary> /// <param name="filename">写从根文件夹开始的相对路径</param> /// <param name="content"></param> public static void Write(string filename, string content) { Write(filename, content, Encoding.UTF8); } } } Builder.cs: public static void Sml_cls(string connid, int type_id) { Models.TypesInfo type = Bll.Types.dao.FindByPk(connid, type_id);//类型 string sql = "select count(*) from dbo.tb_articles where type_id=" + type_id + " and on_off_0='true'"; int pageSize = 3; int totalRecorder = Convert.ToInt32(Dal.Articles.SqlHelper.ExecuteScalar(connid, sql));//总共有多少篇文章 int pageCount = totalRecorder / pageSize;//总页数 if (totalRecorder % pageSize != 0) { pageCount++; } DataTable dt = new DataTable(); int recordcount; for (int currentPage = 1; currentPage <= pageCount; currentPage++) //currentPage-表示生成的静态页面数量 { dt.Clear(); Dal.SqlHelper.Bring.Fill1pgOnly(connid, dt, pageSize, currentPage, "article_id, article_title,article_content,article_sendtime,user_name,hits,article_htmlfile_name,article_tag_spell" , "article_id", "dbo.tb_articles left join dbo.tb_users on dbo.tb_articles.user_id =dbo.tb_users.user_id left join dbo.tb_types on tb_articles.type_id=dbo.tb_types.type_id", "tb_articles.on_off_0='true'and dbo.tb_types.type_id=" + type_id, "article_id desc", out recordcount); StringBuilder html = new StringBuilder(html_small); html.Replace("{top}", html_top); html.Replace("{sitemap}", "当前位置:"); html.Replace("{rightblock_new}", Entities.GetRightblock_new(connid, 2)); html.Replace("{rightblock_hot}", Entities.GetRightblock_hot(connid, 2)); html.Replace("{rightblock_rand}", Entities.GetRightblock_rand(connid, 2)); html.Replace("{foot}", html_foot); StringBuilder sml_list_content = new StringBuilder(); for (int j = 0; j < dt.Rows.Count; j++)//循环生成内容部分 { DataRow r = dt.Rows[j]; /****查询评论数量start*****/ string juddgeSql = "select count(*) from dbo.tb_message_board where msg_type = " + type_id + " and msg_object_id = " + r["article_id"]; int juddgeCount = Convert.ToInt32(Dal.Message_board.SqlHelper.ExecuteScalar(juddgeSql)); /****查询评论数量end*****/ /*如果内容太长就截取一部分Start*/ string article_content = r["article_content"].ToString(); if (article_content.Length >= 50) { article_content = article_content.Substring(0, 50) + "......"; } /*如果内容太长就截取一部分end*/ sml_list_content.Append(@"<div class=""sml_lst_item""> <a href=""detail.htm"" class=""sml_lst_item_title"">").Append(r["article_title"]).Append(@"</a> <div class=""sml_lst_item_sumary""> ").Append(article_content).Append(@"</div> <div class=""sml_lst_item_other""> 更新时间:").Append(r["article_sendtime"]).Append(" 作者:").Append(r["user_name"]).Append(" 评论:").Append(juddgeCount).Append("条 点击:").Append(r["hits"]).Append("次 ") .Append("<a href="/" mce_href="/""detail.htm/">查看详情").Append("</a>") .Append("</div>").Append("</div>"); } html.Replace("{sml_list_content}", sml_list_content.ToString());//将内容部分替换 /**分页*/ StringBuilder sml_pageer = new StringBuilder(); sml_pageer.Append("共").Append(pageCount).Append("篇 页次: "); sml_pageer.Append(currentPage).Append("/").Append(pageCount); if (currentPage <= 1) { sml_pageer.Append(" <span>首页</span> <span>上一页</span> "); } else { sml_pageer.Append(" <a href="/" mce_href="/""index.htm/">首页</a> "); int prePage = currentPage - 1; if (prePage <= 1) sml_pageer.Append(" <a href="/" mce_href="/""index.htm/">上一页</a> "); else sml_pageer.Append(" <a href="/" mce_href="/""list-" + prePage + ".htm/">上一页</a> "); } int basenumber = (currentPage - 1) / 10; int start = basenumber + 1; int end = basenumber + 10; if (end > pageCount) end = pageCount; for (int i = start; i <= end; i++) { if (i != currentPage) { if (i <= 1) sml_pageer.Append(" <a href="/" mce_href="/""index.htm/">").Append(i).Append("</a> "); else sml_pageer.Append(" <a href="/" mce_href="/""list-" + i + ".htm/">").Append(i).Append("</a> "); } else { sml_pageer.Append(" <span>").Append(i).Append("</span> "); } } if (currentPage >= pageCount) { sml_pageer.Append(" <span>尾页</span> <span>下一页</span> "); } else { sml_pageer.Append(" <a href="/" mce_href="/""list-" + (currentPage + 1) + ".htm/">下一页</a> "); sml_pageer.Append(" <a href="/" mce_href="/""list-" + pageCount + ".htm/">尾页</a> "); } html.Replace("{pageer}", sml_pageer.ToString()); /**分页*/ string filename; if (currentPage <= 1) filename = "index.htm"; else filename = "list-" + currentPage + ".htm"; IO.Write( type.Type_html_folder + "//" + filename, html.ToString() ); } }