一般是生成真实的页面,像url是这样的"www.***.com/2008/2/534313312.html" 这就肯定是生成的,用.NET实现就必须重写Render事件using System; using System.Data; using System.Configuration; 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.IO;
public class FreezablePage : System.Web.UI.Page { private bool freeze = false; private string newUrl;
php好像有种很奇妙的方法,可以直接获取buffer里的内容来生成静态,真是好玩。
这就肯定是生成的,用.NET实现就必须重写Render事件using System;
using System.Data;
using System.Configuration;
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.IO;
public class FreezablePage : System.Web.UI.Page
{
private bool freeze = false;
private string newUrl;
protected void Freeze()
{
freeze = true;
}
protected void Freeze(string toUrl)
{
freeze = true;
NewUrl = toUrl;
}
internal string NewUrl
{
get { return newUrl; }
set { newUrl = value; }
}
protected override void Render(HtmlTextWriter writer)
{
if (freeze)
{
MyHtmlFileCreator htmlFile = new MyHtmlFileCreator();
base.Render(htmlFile.RenderHere);
newUrl = HttpContext.Current.Request.Url.AbsolutePath.ToString();
newUrl = newUrl.Replace(".aspx", ".htm");
htmlFile.WriteHTMLFile(Server.MapPath(newUrl));
Response.Redirect(newUrl, true);
}
else
{
base.Render(writer);
}
}
}
internal class MyHtmlFileCreator
{
private StringWriter html;
private HtmlTextWriter htmlWriter;
internal HtmlTextWriter RenderHere
{
get { return htmlWriter; }
}
internal MyHtmlFileCreator()
{
html = new StringWriter();
htmlWriter = new HtmlTextWriter(html);
}
internal void WriteHTMLFile(string virtualFileName)
{
StreamWriter fs = new StreamWriter(virtualFileName, false, System.Text.Encoding.UTF8);
fs.Write(html.ToString());
fs.Close();
}
}