有時候咱們須要在將服務器端生成的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