.aspx生成静态htm页

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();
    }

}
posted @ 2011-03-07 10:59  蔡剑锋  阅读(393)  评论(0编辑  收藏  举报