将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/Silverlight_Team/archive/2009/03/11/1409207.html