ASP.NET中如何用母版页生成静态页面?

解决方案 »

  1.   

    在页面头顶引用 MasterPageFile="file.master"
      

  2.   

    如何生成静态页   
    方案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文件。程序使用了是循环替换,因此对需替换大量元素的模板速度非常快。 /////////////****************//////
    以上是引用别人的答案的
    ////////////****************//////
    给你个地址  也有人问同样的问题   http://topic.csdn.net/t/20060410/22/4676923.html