有时候咱们须要在将服务器端生成的html发送带客户端以前对这些html进行操做,好比生成静态html加之保存、改变生成的html中的某些内容等等,那么久能够经过以下的方案解决。 css
我总结了两种方式,我的以为比较好用,一种是重写Page.Render()方法。一种是经过IHttpmodule来实现。 html
1)这种方法适合控制某个页面,在.aspx.cs里面重写Render()方法便可,该方法提供一个HtmlTextWriter 类型参数,里面就包含了将要发送到客户端的内容,根据asp.net声明周期知道Render阶段是在load事件以后触发的,因此,这个方法很适合完成咱们想要的效果。下面是一个简单的例子: 服务器
1: protected override void Render(HtmlTextWriter writer)
2: {
3: TextWriter tempWriter = new StringWriter();
4: base.Render(new HtmlTextWriter(tempWriter));
5: string str = tempWriter.ToString(); //这个str里面已经包含了html。
6:
7: //而后能够对这个字符串进行处理,好比保存、替换等等
8: writer.Write(str); //再将修改好的html发送到客户端
9: }
2)这种方法在应用级控制,更适合须要对某一类页面进行处理,或者全部页面比较方面。要注册接口的PreSendRequestContent方法,下面为一个例子,有关IHttpmodule内容,本文不重复了: app
1: void context_PreSendRequestContent(object sender, EventArgs e)
2: {
3: HttpApplication app = (HttpApplication)sender;
4: HttpContext context = app.Context;
5: string url = context.Request.RawUrl;
6: StringWriter wr = new StringWriter();
7: context.Server.Execute(url, wr);
8: string htmlCon = wr.ToString();//字符串htmlCon 已经包含了将要发送到客户端的html。
9:
10: }
3) 经过替换Response.Filter也能够实现。asp.net