用替换模板的方法模板页:index。html<!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>
    <style type="text/css">
    ul
    {
     list-style-type:none;
     }
    </style>
</head>
<body>
<div>体育</div>
<div>#tiyu</div>
<div>娱乐</div>
<div>#yule</div>
</body>
</html>执行页面:default.aspx。cs protected void Button1_Click(object sender, EventArgs e)
    {
        string sql = "select top 5 * from [tiyu] order by id desc";
        string sql1 = "select top 5 * from [yule] order by id desc";
        SqlDataReader sdr = dr(sql);
        SqlDataReader sdr1 = dr(sql1);
        StringBuilder sb = new StringBuilder();
        sb.Append("<ul>");
        while (sdr.Read())
        {
            sb.Append("<li>"+sdr.GetString(1)+"</li>");
        }
        sb.Append("</ul>");        StringBuilder sb1 = new StringBuilder();
        sb1.Append("<ul>");
        while (sdr1.Read())
        {
            sb1.Append("<li>" + sdr1.GetString(1) + "</li>");
        }
        sb1.Append("</ul>");
        StreamReader sr=new StreamReader(Server.MapPath("index.htm"),Encoding.GetEncoding("gb2312"));
        string str = sr.ReadToEnd();
        str = str.Replace("#tiyu", sb.ToString());
        str = str.Replace("#yule", sb1.ToString());
        StreamWriter sw = new StreamWriter(Server.MapPath("default.html"),false, Encoding.GetEncoding("gb2312"));
        sw.Write(str);
        sw.Flush();
    }
    public SqlDataReader dr(string sql)
    {
        
        SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["shuju"]);
        con.Open();
        SqlCommand cmd = new SqlCommand(sql,con);
        SqlDataReader sdr = cmd.ExecuteReader();
        return sdr;
  
    }
1、我的思路是用#tiyu和#娱乐 替换,button单击以后循环出体育和娱乐的新闻列表,然后再替换掉#字符,这种方法我试验是可以生成的,只是不知道这种方法对于首页有相当多的栏目来说效率会不会低?
2、如果在单击button除了生成首页静态页,能不能同时也将所有子页面的相关栏目也重新生成为静态页,这样的话服务器吃的消吗?

解决方案 »

  1.   

    好,效率应该不错只是不要忘记,最后关闭datareader,关闭connection
      

  2.   

    肯定很低。。每次replace都会扫描全部的文档一边,要是标签多,比如1000个,那就要扫描1000编,你说效率高吗?
      

  3.   

    使用模板引擎
    public static bool WriteFile(string strText) 
        { 
            string path = HttpContext.Current.Server.MapPath("Html/"); 
            System.Text.Encoding code = System.Text.Encoding.GetEncoding("gb2312"); 
            string temp = HttpContext.Current.Server.MapPath("Html/A.html"); 
            StreamReader sr = null; 
            StreamWriter sw = null; 
            string str = ""; 
            try 
            { 
                sr = new StreamReader(temp, code); 
                str = sr.ReadToEnd(); 
            } 
            catch (Exception exp) 
            { 
                HttpContext.Current.Response.Write(exp.Message); 
                HttpContext.Current.Response.End(); 
                sr.Close(); 
            } 
            string htmlfilename = DateTime.Now.ToString("yyyyMMddHHmmss") + ".html"; 
            //通过正则获取标签内容实现内容替换 
            try 
            { 
                sw = new StreamWriter(path + htmlfilename, false, code); 
                sw.Write(str); 
                sw.Flush(); 
            } 
            catch (Exception ex) 
            { 
                HttpContext.Current.Response.Write(ex.Message); 
                HttpContext.Current.Response.End(); 
            } 
            finally 
            { 
                sw.Close(); 
            } 
            return true; 
        } 
    或通过属性名称,添加到集合,再遍历替换标签 
      

  4.   

    <div><%=tiyu%></div>
    <div><%=tiyu()%></div>asp.net本来就有字符串替换功能!而且不限于字符串变量,实际上可以是很复杂的可执行代码,甚至循环语句等等。那些不懂asp.net的人从几角旮旯(在asp、jsp出现之前才用到的地方)里淘来了字符串替换方法,竟然被csdn上“发扬光大”了?!
      

  5.   

    当你访问一个aspx产生html,然后保存到html后缀的文件里,并且丢到一个根本不安装asp.net系统的web服务器上去运行。这就可以了。“模板”有什么意义?
      

  6.   

    您好,我觉得模板还是有意义的:
    你说的方法生成静态页确实方便,我也用过,用利用WebClient和WebRequest类获得网页源代码就实现过,效率也比较高。但用模板的一个好处是让不太懂编程的人(如美工)也可以参与进来。他们只要把定义好的标签放到想放的位置就可以了。
      

  7.   

    网站中生成html文件很简单,只要两三句话:        StringWriter wr = new StringWriter();
            Server.Execute(pageUrl, wr);     //你可以使用第三个参数传递页面的更多初始数据
            File.WriteAllText(Server.MapPath(htmlUrl), wr.ToString());
      

  8.   

    实际上,你用asp.net先做好一个网站。做好之后,如果需要一些页面采集成html的,使用我在19楼写的3行代码,或者使用一个.net客户端程序访问(例如通过HttpRequest)一下页面url然后把下载的html内容保存成html文件就可以了。
      

  9.   

    说的更白一点,将页面保存成html文件完全可以脱离开编程语言,作为一个独立的系统运作。我们可以在IIS或者其它什么web服务程序上设置,使用规则对某些url重写为对html快照文件的访问。