【转摘留用】页面静态化..
將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();
??? }
}
你只要用此類做為你的頁面的基類就可實現頁面的靜態化了,但此方法有一個缺點,就是他頻繁的讀寫文件,會造成性能的下降。轉載于:https://www.cnblogs.com/ayxiaopan/articles/2018811.html
總結
以上是生活随笔為你收集整理的【转摘留用】页面静态化..的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET开源MVC框架Vici M
- 下一篇: 读入一组文本行,打印最长的文本行