当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > .NET中如何生成静态页

ASP.NET
FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用方法
.NET 常用功能和代码小结
在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出
asp.net IList查询数据后格式化数据再绑定控件
asp.net sql存储过程
asp.net 简单实现禁用或启用页面中的某一类型的控件
asp.net(c#)获取内容第一张图片地址的函数
The remote procedure call failed and did not execute的解决办法
ASP.NET 在线文件管理
asp.net 读取并修改config文件实现代码
ASP.NET Cookie 操作实现
asp.net Silverlight中的模式窗体
Silverlight中动态获取Web Service地址
asp.net Silverlight应用程序中获取载体aspx页面参数
asp.net 水晶报表隔行换色实现方法
asp.net 获取Gridview隐藏列的值
手动把asp.net的类生成dll文件的方法
asp.net 使用ObjectDataSource控件在ASP.NET中实现Ajax真分页
动态指定任意类型的ObjectDataSource对象的查询参数
asp.net Md5的用法小结

ASP.NET 中的 .NET中如何生成静态页


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 139 ::
收藏到网摘: n/a

如何生成静态页: 
  
  方案1: 
  ///   <summary> 
  ///   传入URL返回网页的html代码 
  ///   </summary> 
  ///   <param   name="Url">URL</param> 
  ///   <returns></returns> 
  public   static     string   getUrltoHtml(string   Url) 
  { 
  errorMsg   =   ""; 
  try 
  { 
  System.Net.WebRequest   wReq   =   System.Net.WebRequest.Create(Url); 
  //   Get   the   response   instance. 
  System.Net.WebResponse   wResp   =wReq.GetResponse(); 
  //   Read   an   HTTP-specific   property 
  //if   (wResp.GetType()   ==HttpWebResponse) 
  //{ 
  //DateTime   updated     =((System.Net.HttpWebResponse)wResp).LastModified; 
  //} 
  //   Get   the   response   stream. 
  System.IO.Stream   respStream     =   wResp.GetResponseStream(); 
  //   Dim   reader   As   StreamReader   =   New   StreamReader(respStream) 
  System.IO.StreamReader   reader   =   new   System.IO.StreamReader(respStream,   System.Text.Encoding.GetEncoding("gb2312")); 
  return     reader.ReadToEnd(); 
  
  } 
  catch(System.Exception   ex) 
  { 
  errorMsg   =   ex.Message   ; 
  } 
  return   ""; 
  } 
  
  你可以用这个函数获取网页的客户端的html代码,然后保存到.html文件里就可以了。 
  
  方案2: 
  生成单个的静态页面不是难点,难的是各个静态页面间的关联和链接如何保持完整; 
  特别是在页面频繁更新、修改、或删除的情况下; 
  
  像阿里巴巴的页面也全部是html的,估计用的是地址映射的功能 
  关于地址映射可参考:http://www.easewe.com/Article/ShowArticle.aspx?article=131 
  
  可以看看这个页面,分析一下他的“竞价倒计时”功能 
  http://info.china.alibaba.com/news/subject/v1-s5011580.html?head=top4&Bidding=home5 
  
  ASP.Net生成静态HTML页 
  在Asp中实现的生成静态页用到的FileSystemObject对象! 
  在.Net中涉及此类操作的是System.IO   
  以下是程序代码   注:此代码非原创!参考别人代码 
  
      CODE:       
  //生成HTML页 
      public   static   bool   WriteFile(string   strText,string   strContent,string   strAuthor)   
      { 
        string   path   =   HttpContext.Current.Server.MapPath("/news/"); 
        Encoding   code   =   Encoding.GetEncoding("gb2312"); 
        //   读取模板文件 
        string   temp   =   HttpContext.Current.Server.MapPath("/news/text.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"; 
        //   替换内容 
        //   这时,模板文件已经读入到名称为str的变量中了 
        str   =str.Replace("ShowArticle",strText);   //模板页中的ShowArticle 
        str   =   str.Replace("biaoti",strText); 
        str   =   str.Replace("content",strContent); 
        str   =   str.Replace("author",strAuthor); 
        //   写文件 
        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; 
  
  此函数放在Conn.CS基类中了 
  在添加新闻的代码中引用   注:工程名为Hover 
  
          if(Hover.Conn.WriteFilethis.Title.Text.ToString),this.Content.Text.ToString),this.Author.Text.ToString))) 
          { 
            Response.Write("添加成功"); 
          } 
          else 
          { 
            Response.Write("生成HTML出错!"); 
          }   
    
  
  
  模板页Text.html代码 
  
  
      CODE:       
  <!DOCTYPE   HTML   PUBLIC   "-//W3C//DTD   HTML   4.0   Transitional//EN"   > 
  <HTML> 
  <HEAD> 
      <title>ShowArticle</title> 
        <body> 
  biaoti 
  <br> 
  content<br> 
  author 
  </body> 
  </HTML> 
  biaoti 
  <br> 
  content<br> 
  author 
  </body> 
  </HTML>   
    
  提示添加成功后会出以当前时间为文件名的html文件!上面只是把传递过来的几个参数直接写入了HTML文件中,在实际应用中需要先添加数据库,然后再写入HTML文件 
  
  方案3: 
  给一个客户端参考的例子(SJ) 
  它的作用在于以客户端的方式获取某个页面的代码,然后可以做为其他用途,本例是直接输出 
  <script> 
          var   oXmlHttp   =   new   ActiveXObject("Microsoft.XMLHTTP"); 
          oXmlHttp.open("GET","http://www.163.com",   false); 
          oXmlHttp.send() 
          var   oStream   =   new   ActiveXObject("ADODB.Stream"); 
          if(oStream   ==   null) 
                  alert("您的机器不支持ADODB.Stream.") 
          else 
          { 
                  oStream.Type=1; 
                  oStream.Mode=3; 
                  oStream.Open()   ; 
                  oStream.Write(oXmlHttp.responseBody); 
                  oStream.Position=   0; 
                  oStream.Type=   2; 
                  oStream.Charset="gb2312"; 
                  var   result=   oStream.ReadText(); 
                  oStream.Close(); 
                  oStream   =   null; 
      var   aa   =   window.open("","") 
      document.write(result); 
                  aa.document.write(result); 
          } 
  </script> 
  
  方案4:学csdn一样。用xml保存数据,模版XSL也只有一个文件。 
  使用xml来保存数据,使用xsl来定义模板并且生称数据。可以通过xsl来很方便的在客户端或者服务段显示数据。如果要生成静态叶面那更简单了。去查一下.net的xml类包问题解决。 
                          优点:可以方便快速转换成你想要的格式和内容。 
                          缺点:需要学习更多的内容,不好入门。 
  
  方案5: 
  思路   
  
    1.   利用如Dw-Mx这样的工具生成html格式的模板,在需要添加格式的地方加入特殊标记(如$htmlformat$),动态生成文件时利用代码读取此模板,然后获得前台输入的内容,添加到此模板的标记位置中,生成新文件名后写入磁盘,写入后再向数据库中写入相关数据。 
                2.   使用后台代码硬编码Html文件,可以使用HtmlTextWriter类来写html文件。   
  优点   
  
    1.   可以建立非常复杂的页面,利用包含js文件的方法,在js文件内加入document.write()方法可以在所有页面内加入如页面头,广告等内容。   
  
    2.   静态html文件利用MS   Windows2000的Index   Server可以建立全文搜索引擎,利用asp.net可以以DataTable的方式得到搜索结果。而Win2000的Index服务无法查找xml文件的内容。如果包括了数据库搜索与Index索引双重查找,那么此搜索功能将非常强大。   
  
    3.   节省服务器的负荷,请求一个静态的html文件比一个aspx文件服务器资源节省许多。   
  
    缺点   
  
    思路二:   如果用硬编码的方式,工作量非常大,需要非常多的html代码。调试困难。而且使用硬编码生成的html样式无法修改,如果网站更换样式,那么必须得重新编码,给后期带来巨大的工作量。   
  
    因此这里采用的是第一种思路   
  
    示列代码   
  
    1.定义(template.htm)html模板页面   
  
    <html>   
  
    <head>   
  
    <title></title>   
  
    <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">   
  
    </head>   
  
    <body   >   
  
    <table   $htmlformat[0]   height="100%"   border="0"   width="100%"   cellpadding="10"   cellspacing="0"   bgcolor="#eeeeee"   style="border:1px   solid   #000000">   
  
    <tr>   
  
    <td   width="100%"   valign="middle"   align="left">   
  
    <span   style="color:   $htmlformat[1];font-size:   $htmlformat[2]">$htmlformat[3]</span>   
  
    </td>   
  
    </tr>   
  
    </table>   
  
    </body>   
  
    </html>   
  
    2.asp.net代码:   
  
    //---------------------读html模板页面到stringbuilder对象里----   
  
    string[]   format=new   string[4];//定义和htmlyem标记数目一致的数组   
  
    StringBuilder   htmltext=new   StringBuilder();   
  
    try   
  
    {   
  
     using   (StreamReader   sr   =   new   StreamReader("存放模板页面的路径和页面名"))   
  
     {   
  
    String   line;   
  
    while   ((line   =   sr.ReadLine())   !=   null)   
  
    {   
  
     htmltext.Append(line);   
  
    }   
  
    sr.Close();   
  
     }   
  
    }   
  
    catch   
  
    {   
  
     Response.Write("<Script>alert('读取文件错误')</Script>");   
  
    }   
  
    //---------------------给标记数组赋值------------   
  
    format[0]="background="bg.jpg"";//背景图片   
  
    format[1]=   "#990099";//字体颜色   
  
    format[2]="150px";//字体大小   
  
    format[3]=   "<marquee>生成的模板html页面</marquee>";//文字说明   
  
    //----------替换htm里的标记为你想加的内容   
  
    for(int   i=0;i<4;i++)   
  
    {   
  
     htmltext.Replace("$htmlformat["+i+"]",format[i]);   
  
    }   
  
    //----------生成htm文件------------------――   
  
    try   
  
    {   
  
     using(StreamWriter   sw=new   StreamWriter("存放路径和页面名",false,System.Text.Encoding.GetEncoding("GB2312")))   
  
    {   
  
     sw.WriteLine(htmltext);   
  
     sw.Flush();   
  
     sw.Close();   
  
    }   
  
    }   
  
    catch   
  
    {   
  
    Response.Write   ("The   file   could   not   be   wirte:");   
  
    }   
  
    小结   
    用此方法可以方便的生成html文件。程序使用了是循环替换,因此对需替换大量元素的模板速度非常快。