当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > Asp.Net中动态页面转静态页面

ASP.NET
ASP.NET开发:简化应用程序的开发支持Web标准
asp.net XMLHttpRequest实现用户注册前的验证
asp.net 页面间传值方法小结
asp.net url重写浅谈
asp.net 验证码生成和刷新及验证
C#精髓 GridView72大绝技 学习gridview的朋友必看
实例说明asp.net中的简单角色权限控制
asp.net网站开发包wq.dll打包下载
js与ASP.NET 中文乱码问题
asp.net checkbox 动态绑定id GridView删除提示
asp.net TextBox回车触发事件 图片在img显示
asp.net 脏字典过滤问题 用正则表达式来过滤脏数据
asp.NET 脏字过滤算法
asp.NET 脏字过滤算法 修改版
asp.net sql 数据库处理函数命令
asp.net Javascript 的几种写法与提示
ASP.NET MVC学习笔记
asp.net 中国身份证号码验证代码 非正则
Asp.net中使用Sqlite数据库的方法
asp.net 中文字符串提交乱码的解决方法

ASP.NET 中的 Asp.Net中动态页面转静态页面


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 85 ::
收藏到网摘: n/a

关于在Asp.Net中动态页面转静态页面的方法网上比较多。结合实际的需求,我在网上找了一些源代码,并作修改。现在把修改后的代码以及说明写一下。

一个是一个页面转换的类,该类通过静态函数Changfile()来实现,动态页面到静态页面的转换。

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.IO;

/**//// <summary>
/// Summary description for HtmlProxy
/// </summary>
public class HtmlProxy
...{
public HtmlProxy()
...{
}
public static bool ChangeFile(int id)
...{
string filename = HttpContext.Current.Server.MapPath("Post_" + id + ".html");
//尝试读取已有文件
Stream st = GetFileStream(filename);
//如果文件存在并且读取成功
if (st != null)
...{
using (st)
...{
StreamToStream(st, HttpContext.Current.Response.OutputStream);
return true;
//Response.End();
}
}
else
...{
StringWriter sw = new StringWriter();
HttpContext.Current.Server.Execute("ForumDetail.aspx?PID=" + id, sw);

string content = sw.ToString();
//写进文件
try
...{
using (FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.Write))
...{
using (StreamWriter stw = new StreamWriter(fs, HttpContext.Current.Response.ContentEncoding))
...{
stw.Write(content);
}
}
 return true;
}
catch ...{ return false; }
}
}

private static Stream GetFileStream(string filename)
...{
try
...{
DateTime dt = File.GetLastWriteTime(filename);
TimeSpan ts = dt - DateTime.Now;
if (ts.TotalHours >1)
...{
//一小时后过期
return null;
}
return new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
}
catch ...{ return null; }
}
static public void StreamToStream(Stream src, Stream dst)
...{
  byte[] buf = new byte[4096];
  while (true)
...{
int c = src.Read(buf, 0, buf.Length);
if (c == 0)
return;
dst.Write(buf, 0, c);
 }
 }
}
  在页面文件中,ForURL.aspx的后台代码如下:
protected void Page_Load(object sender, EventArgs e)
...{
try
...{
int id = int.Parse(Request.QueryString["PID"]);
if(HtmlProxy.ChangeFile(id))
...{
 Response.Redirect("Post_" + id + ".html");
}
 else
...{
 Response.Redirect("Post.aspx?PID=" + id );
}
}
 catch ...{
}
}