咨询电话:186 7916 6165 咨询电话:186 7916 6165 (微信同号)    在线QQ:181796286
NEWS BLOG ·
学无止境
关注开优网络 关注前沿
ASP.NET Web 开发之SQL语句
ASP.NET百度地图API使用

ASP.NET Web 开发之静态页

发表日期:2015-11-13    文章编辑:南昌开优网络    浏览次数:4074    标签:ASP.NET应用

一、生成真静态页
protected void lbtnIndex_Click(object sender, EventArgs e)
{
    string url = "http://"+Request.Url.Host+":"+Request.Url.Port+"/index.aspx";
    Utility.Tool.GenHTMLFromURL(url, Server.MapPath("/index.html"), "");
    Utility.Tool.Alert("生成成功",this.Page);
}

二、采用iframe方法生成静态页
1、把网页中动态部分:如留言信息,用ifrme包括起来做成一个新页面  replay.aspx
2、在head部分加上 //加在包括的页面里 即 replay.aspx
 <script language="javascript" type="text/javascript">
        $(function() {
            var h = $(document).height(); // 当前文档的高度
            h = parseInt(h);
            var $frm = $(window.parent.document.getElementById("frmreplay"));
            $frm.height(h);
        })


        function changeCode() {
            var imgNode = document.getElementById("vimg");
            imgNode.src = "handler/WaterMark.ashx?t=" + (new Date()).valueOf();  // 这里加个时间的参数是为了防止浏览器缓存的问题   
        }  
    </script>


3、在news_content.aspx中的动态部分拖入一个 <asp:Literal ID="litfrm" runat="server"></asp:Literal>
4、在cs中加上
litfrm.Text = "<iframe id='frmreplay' name='frmreplay' frameborder='no' src='replay.aspx?newsid=" + news.Id + "' style='border:none; width: 100%;'  scrolling='no'></iframe>";
5、在网站后台加一个按钮,生成静态页
    DataTable dt = nm.SelectAll(); //获取所所有新闻 select * from news
      foreach (DataRow row in dt.Rows)
        {
            string newsid = row["id"].ToString(); //取出所有新闻的id用于生成静态页
            string url = "http://" + Request.Url.Host + ":" + Request.Url.Port + "/Web/newscontent.aspx?newsid=" + newsid;
            Xiaobin.Utility.Tool.GenHTMLFromURL(url, Server.MapPath("~/" + newsid + ".html"), "");
        }
6、修改前台的指向<a href='<%#Eval("id") %>.html'><%#Eval("title")</a>

三、采用模版生成静态页
1、先使用第一种方法生成一个真静态页GenHTMLFromURL
2、在生成静态页的html文件中如: temp.html 中的所有需要从数据库中获取数据的变量改为 $id$、$title$、$body$、$visitnum$、$createdate$
3、和第二种方法一样只是
      DataTable dt = nm.SelectAll();  //获取所所有新闻 select * from news
      foreach (DataRow row in dt.Rows)
        {
            string newsid = row["id"].ToString();
            string title = row["title"].ToString();
            string body = row["content"].ToString();
            string time = DateTime.Parse(row["createtime"].ToString()).ToString("yyyy-MM-dd HH:mm:ss");

            Xiaobin.Utility.Tool.GenHTMLFromTemp(Server.MapPath("../static/temp.html"), Server.MapPath("../static/" + newsid + ".html"), new List<string> { "$title$", "$body$", "$time$", "$id$" }, new List<string> { title, body, time, newsid }, "");            
        }


四、采用UrlRewriter实现伪静态
1、web层中引用Intelligencia.UrlRewriter.dll
Intelligencia.UrlRewriter.dll
2、修改web.config文件
<configSections>     
 <section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
</configSections>
3、在system.web节点里
<httpModules>
      <add type="Intelligencia.UrlRewriter.RewriterHttpModule,Intelligencia.UrlRewriter" name="UrlRewriter"/>
</httpModules>
4、正则表达式重写url添加在system.web节点外面(上面)
<rewriter>
    <rewrite url="news_content(\d+).html" to="news_content.aspx?id=$1" /> //url为重写后的地址,to为原地址,$1代表第一个括号匹配的值
    <rewrite url="aboutus(\d+)_(\d+).html" to="aboutus.aspx?id=$1&amp;cabh=$2" /> //id=$1&amp;cabh=$2 $1为第一个参数,$2为第二个参数
</rewriter>
5、修改前台链接地址
如news.aspx页面中的链接原为:
news_content.aspx?id=<%#Eval("id") %>  改为  news_content<%#Eval("id") %>.html

五、采用URLRewriter.dll实现伪静态
1、web层中引用URLRewriter.dll
URLRewriter.dll
2、修改web.config文件、引用URLRewrite.dll伪静态
在<configuration>节点中的<configSections>节点中加上
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />

3、正则表达式重写url添加在system.web节点上面
 <RewriterConfig>
    <Rules>
      <RewriterRule>
        <LookFor>~/news_body(\d+).html</LookFor> //LookFor生成的伪静态 (\d+)为指向原路径的第一个参数
        <SendTo>~/news_body.aspx?id=$1</SendTo> //SendTo指向的原页面 $1为第一个正则匹配参数
      </RewriterRule>
     <RewriterRule>
        <LookFor>~/web/new/(.[0-9]*)\.aspx</LookFor> //~/表示根目录 
        <SendTo>~/web/new.aspx?id=$1</SendTo> //注:用URLRewriter实现伪静态一定要加上文件的路径
      </RewriterRule>
    </Rules>
  </RewriterConfig>

或者加上:<RewriterConfig configSource="URLRewriter.config"/>  //用于多数正则表达规则的单独文件
在网站根目录中新建URLRewriter.config文件,和以上规则一样的xml文件


4、在system.web节点中修改
<compilation debug="true" targetFramework="4.0">
    <assemblies>
        <add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    </assemblies>
</compilation>
改成:
 <compilation defaultLanguage="c#" debug="true">
      <assemblies>
        <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
      <!-- 加上此节点,保证原本就是.html类型的文件能正常访问 -->
      <buildProviders>
        <add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
        <add extension=".htm" type="System.Web.Compilation.PageBuildProvider" />
        <add extension=".xml" type="System.Web.Compilation.PageBuildProvider" />        
      </buildProviders>
    </compilation>

<!--采用URLRewriter-->
<httpHandlers>
        <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter"/>
        <add verb="*" path="*.htm" type="URLRewriter.RewriterFactoryHandler, URLRewriter"/>
        <add verb="*" path="*.xml" type="URLRewriter.RewriterFactoryHandler, URLRewriter"/>
        <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>



加分页伪静态
1、不带参路的分页 直接在anp控件中开启EnableUrlRewriting、UrlPaging、UrlRewritePattern
  <RewriterRule>
        <LookFor>~/news_list.aspx?page=$1</LookFor> //page参数
        <SendTo>~/news_list_(\d).html</SendTo> //url中页码如:news_list_1.html,2为第二页,以此类推
      </RewriterRule>
    </Rules>
anp控件中开启 EnableUrlRewriting="True" UrlPaging="True"  UrlRewritePattern="~/news_list_{0}.html" 
/{0}即指重写中的(\d)页码参数
 UrlPaging //开启page参数
EnableUrlRewriting  //开启url重写
UrlRewritePattern //重写规则
2、带参数的分页 在anp控件中开启EnableUrlRewriting、UrlPaging。并在后台cs中定义UrlRewritePattern参数
  <RewriterRule>
        <LookFor>~/news_list.aspx?caid=$1&page=$2</LookFor> //caid+page两个参数
        <SendTo>~/news_list_(\d)_(\d).html</SendTo> //如news_list_1_1.html 第一个1为caid参数,第二个1为page即页码,如news_list_1_1.html
      </RewriterRule>
    </Rules>
anp.UrlRewritePattern = "~/news_list_"+caid+"_{0}.html";     //cs文件page_load中加上anp的指向