ASP.NET生成静态页面方法主要有三种
 
第一种方法:向服务器的动态页面发送请求,获取页面的html代码。这种方法缺点显而易见:速度慢。另外如果请求的动态页面有验证控件的话,返回的html页面却无法进行数据验证。但这种方法写起来比较简单。主要代码如下:
 
#region//生成被请求URL静态页面
 
public static void getUrltoHtml(string Url,string Path)//Url为动态页面地址,Path为生成的静态页面
 
{
 
try
 
{
 
   System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);
 
     // Get the response instance.
 
   System.Net.WebResponse wResp =wReq.GetResponse();
 
     // 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"));
 
   string str=reader.ReadToEnd();
 
   System.IO.StreamWriter sw=new System.IO.StreamWriter(Path,false,System.Text.Encoding.GetEncoding("gb2312"));
 
   sw.Write(str);
 
   sw.Flush();
 
   sw.Close();
 
   System.Web.HttpContext.Current.Response.Write(" ");
 
}
 
catch(System.Exception ex)
 
{
 
   System.Web.HttpContext.Current.Response.Write(" ");
 
}
 
}
 
#endregion
 
第二种方法:从文件读取模版,替换模版中的参数后输出文件,这种方法的生成速度上比第一种要快许多,而且模版内容可以用工具任意编辑
 
主要代码:
 
using System;
 
using System.Collections;
 
using System.ComponentModel;
 
using System.Data;
 
using System.Drawing;
 
using System.Web;
 
using System.Web.SessionState;
 
using System.Web.UI;
 
using System.Web.UI.WebControls;
 
using System.Web.UI.HtmlControls;
 
using System.IO;
 
using System.Text;
 
namespace xinxi
 
{
 
///
 
/// CreatePage的摘要说明。
 
///
 
// www.365xinxi.net
 
// 此类是生成静态网页的小程序
 
public class Create
 
{
 
   public void CreatePage()
 
   {
 
   }
 
   public static bool WriteFile(string strText,string strContent,string strAuthor)
 
   {
 
    string path = HttpContext.Current.Server.MapPath("/test/");//文件输出目录
 
    Encoding code = Encoding.GetEncoding("gb2312");
 
    // 读取模板文件
 
    string temp = HttpContext.Current.Server.MapPath("/template/test.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;
 
   }
 
}
 
}
 
//原理是利用System.IO中的类读写模板文件,然后用Replace替换掉模板中的标签,写入静态html
 
第三种方法:如果生成的文件数量比较多,第二种方法就要反复读取模版内容,这时可以用第三种方法——直接将你的模版写在代码中,和上次我写的网站Header和Footer的制作方法类似:
 
using System;
 
using System.Collections;
 
using System.Data;
 
using System.Data.OleDb;
 
using System.Text;
 
using System.IO;
 
using System.Web;
 
using System.Web.UI;
 
using System.Web.UI.WebControls;
 
using System.Web.UI.HtmlControls;
 
namespace xinxi
 
{
 
///
 
/// 自定义公共函数
 
///
 
public class myfun
 
{
 
   #region//定义模版页
 
   public static string SiteTemplate()
 
   {
 
    string str="";
 
    str+="...";//模版页html代码
 
    return str;
 
   }
 
   #endregion
 
   public static bool WriteFile(string strText,string strContent,string strAuthor)
 
   {
 
    string path = HttpContext.Current.Server.MapPath("/test/");//文件输出目录
 
    Encoding code = Encoding.GetEncoding("gb2312");
 
    StreamWriter sw=null;
 
    string str=SiteTemplate();//读取模版页面html代码
 
    string htmlfilename=DateTime.Now.ToString("yyyyMMddHHmmss")+".html";//静态文件名
 
    // 替换内容
 
    str = str.Replace("ShowArticle",strText);
 
    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;
 
   }
 
}
 
}

三种C#.net生成静态页面的方法的更多相关文章

  1. PHP生成静态页面的方法

          在PHP网站开发中为了网站推广和SEO等需要,需要对网站进行全站或局部静态化处理,PHP生成静态HTML页面有多种方法,比如利用PHP模板.缓存 等实现页面静态化,今天就以PHP实例教程形 ...

  2. 浅谈php生成静态页面

    一.引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比方修改编辑.比方阅读权 ...

  3. 比较详细PHP生成静态页面教程

    一,PHP脚本与动态页面. PHP脚本是一种服务器端脚本程序,可通过嵌入等方法与HTML文件混合, 也可以类,函数封装等形式,以模板的方式对用户请求进行处理.无论以何种方式,它的基本原理是这样的.由客 ...

  4. PHP代码为什么不能直接保存HTML文件——>PHP生成静态页面教程

    1.server会依据文件的后缀名去进行解析,假设是HTML文件则server不会进行语法解析.而是直接输出到浏览器. 2.假设一个页面中所有都是HTML代码而没有须要解析的PHP语法,则没有必要保存 ...

  5. PHP生成静态页面详解

    PHP生成静态页面详解 看到很多朋友在各个地方发帖问PHP生成静态文章系统的方法,以前曾做过这样一个系统,遂谈些看法,以供各位参考.好了,我们先回顾一些基本的概念. 一,PHP脚本与动态页面. PHP ...

  6. PHP代码为什么不能直接保存HTML文件——>PHP生成静态页面教程

    1.服务器会根据文件的后缀名去进行解析,如果是HTML文件则服务器不会进行语法解析,而是直接输出到浏览器. 2.如果一个页面中全部都是HTML代码而没有需要解析的PHP语法,则没有必要保存为PHP文件 ...

  7. .NET生成静态页面并分页

    因为公司的产品用asp开发, 前一段时间用asp写了一个生成静态页面并分页的程序,但缘于对.net的热爱,写了这个.net下的生成静态页面并分页的程序. 主要的原理就是替换模板里的特殊字符. 1.静态 ...

  8. .net 生成 静态页面

    .net 生成 静态页面 <!--Main.Aspx--> <%@ page language="C#" %> <%@ import namespac ...

  9. 用 Smarty 生成静态页面入门介绍

    why Smarty? 随着公司首页(以下简称首页)流量越来越大,最近开始考虑使用后台语言生成静态页面的技术. 我们知道,一个简单页面一般是一个 .html(或者 .htm ..shtml)后缀的文件 ...

随机推荐

  1. python urllib2模块携带cookie

    今天干活遇到一个事.有一些网站的一些操作非得要求你登陆才能做,比如新浪微博,你要随便看看吧,不行,非得让你登陆了才能看,再比如一些用户操作,像更改自己的资料啦,个人的隐私啦巴拉巴拉的.想抓取这样的ur ...

  2. tcp/ip体系-转载

    如果还想在测试这条路上继续走下去的话,那么下面这些东西就是我们必须去掌握的,至少你还不想止步于简单的黑盒测试--其实,一直想去接触Linux下的应用测试,这样能学到东西会很多,而且会非常的受用.之前听 ...

  3. linux 多线程基础1

    一.什么是线程        在一个程序里的多个执行路线就叫做线程.更准确的定义是:线程是“一个进程内部的一个控制序列”. 典型的unix进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情. ...

  4. python Day 2 - 编写数据库模块

    在一个Web App中,所有数据,包括用户信息.发布的日志.评论等,都存储在数据库中.在awesome-python-app中,我们选择MySQL作为数据库. Web App里面有很多地方都要访问数据 ...

  5. xom报错 Exception in thread "main" java.net.UnknownHostException: file

    Exception in thread "main" java.net.UnknownHostException: file at java.net.AbstractPlainSo ...

  6. 博客搬家到 http://fresky.github.io/ - Visual Studio的插件Pdbproj可以把pdb转换成C++项目

    博客搬到了Dawei XU,请各位看官挪步.最新的一篇是:Visual Studio的插件Pdbproj可以把pdb转换成C++项目.

  7. 【JAVA - SSM】之MyBatis的ParameterType的使用

    在MyBatis的Mapper.xml文件中,参数的表示方法有两种:一种是使用 "#{XXX}" 的方式表示的,另一种是使用 "${XXX}" 的方式表示的.今 ...

  8. freemarke之TemplateDirectiveModel详解

    http://hougbin.iteye.com/blog/1457924 TemplateDirectiveModel接口是freemarker自定标签或者自定义指令的核心处理接口.通过实现该接口, ...

  9. HTML5到底能给企业带来些什么?

    一.改变企业网络广告的模式与分布 广告是企业网络营销的主要方式之一.十几年来,无论是展示还是互动,基本被Adobe Flash所主宰.然而,HTML5网页的多媒体特性.三维.图形及特效,超炫的浏览体验 ...

  10. ngnix apache tomcat集群负载均衡配置

    http://w.gdu.me/wiki/Java/tomcat_cluster.html 参考: Tomcat与Apache或Nginx的集群负载均衡设置: http://huangrs.blog. ...