写了个生成静态页面的类,其实和前2篇一样是根据数据库的数据,然后替换模板页的例子,当然可以根据需要把类改的更加通用一些:
class RankingSet:
- using System;
- using System.Data;
- using System.Configuration;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Web.UI.HtmlControls;
- using HoWaveDbHelper;
- using System.Text;
- using System.IO;
- using System.Data.SqlClient;
- /// <summary>
- /// RankingSet 的摘要说明
- /// </summary>
- public class RankingSet
- {
- string readUrl = "#";
- string url = "#";
- string htmStr = "失败";
- public RankingSet()
- {
- }
- public RankingSet(string readUrl, string url)
- {
- this.readUrl = readUrl;
- this.url = url;
- }
- public string RankingSetStr()
- {
- htmStr = ReadHtml(readUrl);
- return RankingSetStr(htmStr);
- }
- public string RankingSetStr(string htmStr)
- {
- if (htmStr != "失败")
- {
- DataSet DsDay, DsWeek, DsMoon;
- GetRanking(out DsDay, out DsWeek, out DsMoon);
- string strDiv = GetAllDiv(DsDay, DsWeek, DsMoon,htmStr);
- return strDiv;
- }
- else
- {
- return "";
- }
- }
- public string IntoHtm()
- {
- string strDiv = RankingSetStr();
- if(strDiv=="")
- return "写入失败!";
- return InsertHtml(url,strDiv);
- }
- public string IntoHtm(string htmStr)
- {
- string strDiv = RankingSetStr(htmStr);
- if (strDiv == "")
- return "写入失败!";
- return InsertHtml(url, strDiv);
- }
- /// <summary>
- /// 分别获取三钟排行的DataSet
- /// </summary>
- /// <param name="DsDay">日排行</param>
- /// <param name="DsWeek">周排行</param>
- /// <param name="DsMoon">月排行</param>
- private void GetRanking(out DataSet DsDay, out DataSet DsWeek, out DataSet DsMoon)
- {
- SqlParameter[] spDay ={ Product_Click.SqlParameters("@intTop", SqlDbType.Int, 0, 11), Product_Click.SqlParameters("@type", SqlDbType.Int, 0, 1) };
- SqlParameter[] spWeek ={ Product_Click.SqlParameters("@intTop", SqlDbType.Int, 0, 11), Product_Click.SqlParameters("@type", SqlDbType.Int, 0, 2) };
- SqlParameter[] spMoon ={ Product_Click.SqlParameters("@intTop", SqlDbType.Int, 0, 11), Product_Click.SqlParameters("@type", SqlDbType.Int, 0, 3) };
- DsDay = HoWaveDbHelper.DbHelperSQL.RunProcedure("S_HLShop_Product_Ranking", spDay, "strDay");
- DsWeek = HoWaveDbHelper.DbHelperSQL.RunProcedure("S_HLShop_Product_Ranking", spWeek, "strWeek");
- DsMoon = HoWaveDbHelper.DbHelperSQL.RunProcedure("S_HLShop_Product_Ranking", spMoon, "strMoon");
- }
- /// <summary>
- /// 生成HTML
- /// </summary>
- /// <param name="strDiv">要写入文本的字符串</param>
- /// <param name="url">文本路径</param>
- public string InsertHtml(string url,string strDiv)
- {
- if (strDiv == "")
- return "写入失败!";
- using (StreamWriter sw = new StreamWriter(url, false, System.Text.Encoding.GetEncoding("utf-8")))
- {
- try
- {
- sw.Write(strDiv);
- return "写入成功!";
- }
- catch
- {
- return "写入失败!";
- }
- finally
- {
- sw.Flush();
- sw.Close();
- }
- }
- }
- /// <summary>
- /// 读取HTML
- /// </summary>
- /// <param name="url">文本路径</param>
- public string ReadHtml(string readUrl)
- {
- //Encoding code = Encoding.GetEncoding("gb2312");
- Encoding code = System.Text.Encoding.Default;
- StreamReader sr = null;
- // StreamWriter sw = null;
- //读取
- try
- {
- sr = new StreamReader(readUrl, code);
- htmStr = sr.ReadToEnd();
- }
- catch
- {
- }
- finally
- {
- sr.Close();
- }
- return htmStr;
- }
- /// <summary>
- /// 所有类排行数据填充
- /// </summary>
- /// <param name="DsDay">日排行</param>
- /// <param name="DsWeek">周排行</param>
- /// <param name="DsMoon">月排行</param>
- /// <param name="htmStr">网页内容</param>
- /// <returns></returns>
- private string GetAllDiv(DataSet DsDay, DataSet DsWeek, DataSet DsMoon, string htmStr)
- {
- string dataStr = htmStr;
- dataStr = GetDiv(1, DsDay, dataStr);
- dataStr = GetDiv(2, DsWeek, dataStr);
- dataStr = GetDiv(3, DsMoon, dataStr);
- return dataStr;
- }
- /// <summary>
- /// 具体类排行数据填充
- /// </summary>
- /// <param name="tit">类别</param>
- /// <param name="Ds">数据</param>
- /// <returns></returns>
- private string GetDiv(int tit, DataSet Ds, string htmStr)
- {
- int strLen = 8;
- if (Ds.Tables.Count == 0)
- return htmStr;
- string ProductID, ProductName, SubProductName;
- decimal pric = 0.0m;
- string dataStr = htmStr;
- dataStr = dataStr.Replace("{Date" + tit + "}", DateTime.Now.ToString()); //对缓存时间进行赋值
- int leftStr = dataStr.IndexOf("<!--li" + tit + "b-->");
- int rightStr = dataStr.IndexOf("<!--li" + tit + "e-->");
- if (leftStr < 1 || rightStr >= dataStr.Length || dataStr.Length < 1 || rightStr < 1 || leftStr > rightStr)
- return "数据有错";
- int sumStr = rightStr - leftStr;
- if (sumStr >= dataStr.Length || sumStr < 1)
- return "数据有错";
- string listStr = dataStr.Substring(leftStr, sumStr); //获取要替换的列表
- if(listStr.Length<12)
- return "数据有错";
- listStr = listStr.Substring(11);
- StringBuilder sbDiv = new StringBuilder(5000);
- foreach (DataRow Dr in Ds.Tables[0].Rows)
- {
- ProductID = Dr["ProductID"].ToString();
- ProductName = Dr["ProductName"].ToString();
- SubProductName = ProductName;
- if (ProductName.Length > strLen)
- SubProductName = ProductName.Substring(0, strLen);
- pric = Convert.ToDecimal(Dr["Prices"]);
- string newList = listStr;
- newList = newList.Replace("{ProductID" + tit + "}", ProductID);
- newList = newList.Replace("{ProductName" + tit + "}", ProductName);
- newList = newList.Replace("{SubProductName" + tit + "}", SubProductName);
- newList = newList.Replace("{pric" + tit + "}", pric.ToString("C"));
- sbDiv.Append(newList);
- sbDiv.Append("/n");
- }
- dataStr = dataStr.Replace(listStr, sbDiv.ToString());
- return dataStr;
- }
- }
被调用的html:
- <link type="text/css" rel="stylesheet" href="IndexStyle.css" />
- <div class="r0"><h2><span class="title">热点3C排行(本日)</span></h2>
- <div class="dian pro2" >
- <!--缓存时间:{Date1}-->
- <ul class="paihang">
- <!--li1b--><li><span class="span_title">
- <a href="/Shop/Auction/Auction.aspx?ProductID={ProductID1}" target="_blank" title="{ProductName1}">{SubProductName1}</a>
- </span>
- <span class="span_ProductPrice">{pric1}</span>
- </li><!--li1e-->
- </ul></div>
- </div>
- <div class="r1"><h2><span class="title">热点3C排行(本周)</span></h2>
- <div class="dian pro2" >
- <!--缓存时间:{Date2}-->
- <ul class="paihang">
- <!--li2b--><li><span class="span_title"> <a href="/Shop/Auction/Auction.aspx?ProductID={ProductID2}" target="_blank" title="{ProductName2}">{SubProductName2}</a></span>
- <span class="span_ProductPrice">{pric2}</span></li><!--li2e-->
- </ul>
- </div></div>
- <div class="r1"><h2><span class="title">热点3C排行(本月)</span></h2>
- <div class="dian pro2" >
- <!--缓存时间:{Date3}-->
- <ul class="paihang">
- <!--li3b--><li><span class="span_title"> <a href="/Shop/Auction/Auction.aspx?ProductID={ProductID3}" target="_blank" title="{ProductName3}">{SubProductName3}</a></span>
- <span class="span_ProductPrice">{pric3}</span></li><!--li3e-->
- </ul></div></div>
调用代码:
- string readUrl = Server.MapPath("../Label/LabelOutPut/网站访问排行.htm");
- string url = Server.MapPath("../top/index_Ranking.htm");
- RankingSet Rks = new RankingSet(readUrl, url);
- string strReturn = Rks.IntoHtm();
- Response.Write( Rks.RankingSetStr()); //获取要写入网页的字符串
- Response.Write("<script>alert('"+strReturn+"')</script");