asp.net页面静态化

 

 

将asp.net页面静态化有很大意义,在些我就不多说了,实现asp.net页面静态化有很多种方面,在此我介绍一种在asp.net内实现的方法。大家都知道,每个asp.net页面都有一个特定的类对其进行处理,默认情况下该类是从Page类派生的。我们所要做的就是从Page类派生自己的类改写特定的方法。具体实现如下:

 

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
public class FreezablePage : System.Web.UI.Page
{
// When Asp.Net renders the page the Page.Render method is invoked
// Override the method to hook in

protected void Page_Load(object sender, EventArgs e)
{
//Response.HeaderEncoding = System.Text.Encoding.UTF8;
//Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");

Freeze(string.Format(@"{0}.htm", Request.Url.ToString()));
}
protected override void Render(HtmlTextWriter writer)
{
if (freeze)
{
MyHtmlFileCreator htmlFile = new MyHtmlFileCreator();
// Let Asp.net render the output, catch it in the file creator
            base.Render(htmlFile.RenderHere);
newUrl = HttpContext.Current.Request.Url.AbsolutePath.ToString();
newUrl = newUrl.Replace(".aspx", ".htm");
//Response.HeaderEncoding = System.Text.Encoding.UTF8;
//Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
// Write new html file
            htmlFile.WriteHTMLFile(Server.MapPath(newUrl));
// Redirect

Response.Redirect(newUrl, true);
}
else
{
// Default behavior
            base.Render(writer);
}
}
// Flag render event
    protected void Freeze()
{
freeze = true;
}
protected void Freeze(string toUrl)
{
freeze = true;
NewUrl = toUrl;
}
private bool freeze = false;
private string newUrl;
internal string NewUrl
{
get
{
return newUrl;
}
set
{
newUrl = value;
}
}
}
internal class MyHtmlFileCreator
{
private StringWriter html;
private MyHtmlTextWriter htmlWriter;
// override the HtmlTextWriter to reach the constructor
// the constructor in the base class is protected 
    class MyHtmlTextWriter : HtmlTextWriter
{
internal MyHtmlTextWriter(TextWriter tw) : base(tw) { }
}
// publish the HTMLwriter
    internal HtmlTextWriter RenderHere
{
get { return htmlWriter; }
}
// constructor initializes stringwriter and htmlwriter based on that
// initialize Url 
    internal MyHtmlFileCreator()
{
html = new StringWriter();
htmlWriter = new MyHtmlTextWriter(html);
}
internal void WriteHTMLFile(string virtualFileName)
{
// Stringreader reads output rendered by asp.net
// Stringwriter writes html output file
        StringReader sr = new StringReader(html.ToString());
StringWriter sw = new StringWriter();
// Read from input
        string htmlLine = sr.ReadLine();
while (htmlLine != null)
{
/**/ Filter out ASp.net specific tags
            //if (!((htmlLine.IndexOf("<form") > 0) ||
//      (htmlLine.IndexOf("__VIEWSTATE") > 0) ||
//      (htmlLine.IndexOf("</form>") > 0)))
//{ sw.WriteLine(htmlLine); }
            sw.WriteLine(htmlLine);
htmlLine = sr.ReadLine();
}
// Write contents stringwriter to html file
        StreamWriter fs = new StreamWriter(virtualFileName,false,System.Text.Encoding.UTF8);
//StreamWriter f=new StreamWriter(
        fs.Write(sw.ToString());
fs.Close();
}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值