在这里,我将一些新闻从数据库读取后,以静态化形式显示出来。
先找一个静态页面模板,如下:

注意页面中的NewsTitle和NewsContent标签
下面我们在一个按钮的事件方法中写生成代码:
string aid = this.GridView1.DataKeys[e.RowIndex]["ArticleID"].ToString();
SqlConnection conn = new SqlConnection("server=.;database=tb_News;uid=sa;pwd=");
SqlCommand cmd = new SqlCommand("select * from tb_Ariticle where ArticleID=" + aid, conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
//获取新闻发布的时间
string date = "";
if (dr.Read())
{
date = Convert.ToDateTime(dr["RelaseDate"]).ToString("yyyyMMddHHmmss_");//获取时间是为了生成的时候构造文件民名
//调用静态生成方法
TransferStatic(dr["Title"].ToString(), dr["Content"].ToString(), date, aid);
}
/// <summary>
/// 转换方法
/// </summary>
/// <param name="title"></param>
/// <param name="content"></param>
/// <param name="date"></param>
/// <param name="aid"></param>
/// <returns></returns>
private bool TransferStatic(string title,string content,string date,string aid)
{
//输出路径
string outPath = Server.MapPath("~/News\\");
Encoding encoding = Encoding.GetEncoding("gb2312"); //定义转换的编码格式
//读取模板文件:这个是为了下面利用模板
string htmlModel = Server.MapPath("~/mode/ContentModel.html");
//利用流的方法
StreamWriter sw = null;
StreamReader sr = null;
string str = ""; //保存从模板文件中读取的内容以及后面替换的内容
//读文件
try
{
sr = new StreamReader(htmlModel, encoding);
str = sr.ReadToEnd(); //将模板文件读取到字符串str中
}
catch(Exception e)
{
Response.Write(e.Message);
Response.End();
sr.Close();
}
//构造要生成的静态页面的名字
string pageName = date + aid + ".html";
//开始替换内容
str = str.Replace("NewsTitle",title);//第一个参数是要替换的内容部分
str = str.Replace("NewsContent", content);
//写文件
try
{
sw = new StreamWriter(outPath + pageName, true, encoding);
sw.Write(str);//将字符串str写入到文件
sw.Flush(); //这个最好不好忘记
}
catch (Exception e)
{
Response.Write(e.Message);
Response.End();
}
finally
{
sw.Close();
}
return true;
}
我们打开News目录,就会发现我们刚才生成的页面。