2010-03-04 35 views
6

的底部什麼是ViewState中移動底部的頁面ASP.NET:移動的ViewState到

可這在的IHttpHandler可以在指定來完成的最新和最偉大的方式web.config攔截請求到「* .aspx」?

<httpHandlers> 
    <add verb="*" path="*.aspx" type="MyApp.OptimizedPageHandler" /> 
<httpHandlers> 

其他選項是,這可能在IHttpModule的來完成,但是這是不是高性能,因爲它會攔截所有請求。

而且它可以在一個類派生來完成從母版 -class,但這並不模塊化

有沒有性能處罰到這個?

+5

請問爲什麼要將其移動到頁面底部?我懷疑任何人都在乎你呈現的HTML看起來多麼性感:) – Polaris878 2010-03-04 14:48:40

+0

@ Polaris878,我同意(+1),但是對於擁有巨大視圖狀態的頁面,當查看源代碼/調試時,它會使它們更容易在眼睛中) – Rob 2010-03-04 14:58:14

+6

The搜索爬蟲關心。 – IrishChieftain 2010-03-04 15:07:35

回答

1

經過一番研究,我放在一起this blog-post

我通過創建一個的HttpModule和應用響應濾波器,這修改頁面的輸出和移動的ViewState窗體底部解決的問題。

public class ViewStateSeoHttpModule : IHttpModule { 
    public void Init(HttpApplication context) { 
     context.BeginRequest += new EventHandler(BeginRequest); 
    } 

    private void BeginRequest(object sender, EventArgs e) { 
     HttpApplication application = sender as HttpApplication; 

     bool isAspNetPageRequest = GetIsAspNetPageRequest(application); 
     if(isAspNetPageRequest) { 
      application.Context.Response.Filter = 
       new ViewStateSeoFilter(application.Context.Response.Filter); 
     } 
    } 

    private bool GetIsAspNetPageRequest(HttpApplication application) { 
     bool isAspNetPageRequest = application.Context.Handler is System.Web.UI.Page; 
     return isAspNetPageRequest; 
    } 
    // [...] 
+2

這是非常樂觀的...什麼是無擴展的網址,或者如果你使用的不是aspx以外的東西? 不,你應該看看你的當前處理程序是不是System.Web.UI.Page。 bool isAspNetPageRequest = application.Context.Handler is System.Web.UI.Page; – 2010-05-24 13:27:56

+0

非常非常好的輸入@BurningIce – 2010-05-24 16:11:40

2

您可以通過創建PageStatePersister類的自定義實現來控制ViewState數據的加載方式和保存位置。然後爲所有ASPX頁面創建一個基類並覆蓋PageStatePersister方法以返回您的自定義實現。然後,可以根據您的要求輕觸到要存儲視圖狀態的任何頁面事件。

我質疑它是否值得。您是否不必要地存儲了大量的數據?ViewState?也許你可以通過少使用ViewState或者關閉某些控件來獲得更多的好處,而不僅僅是將它移動到HTML頁面中的不同位置。

0

擴展Page類爲您提供對頁面渲染的最大控制。如果您想將ViewState移動到給定頁面的底部,請爲您的頁面使用您的自定義基類。如果您不需要,請使用Page類。

派生自Page類的唯一性能風險是在實現重寫的方法時。除非你做的東西特別低效,否則不應該有任何明顯的性能影響。