2010-03-04 9 views
6

¿Cuáles son las últimas y mejores maneras de mover a ViewState inferior de la páginaASP.NET: Moving ViewState a pie de la página

se puede hacer esto en un IHttpHandler que se pueden especificar en el web.config para interceptar solicitudes a "* .aspx"?

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

Otras opciones es que esto se podría hacer en un IHttpModule, pero eso es no como performant, ya que interceptará todas las solicitudes.

También se podría hacer en una deriva una clase a partir de la página o MasterPage -class, pero esto es no como modular.

¿Hay alguna penalizaciones de rendimiento a esto?

+5

¿Puedo preguntar por qué querría moverlo al final de la página? Dudo que a nadie le importe lo sexy que se ve el HTML renderizado :) – Polaris878

+0

@ Polaris878, que estoy de acuerdo con (+1), pero, para páginas con gran estado de visualización, sería más fácil para los ojos al ver fuente/depuración :) – Rob

+6

los rastreadores de búsqueda se preocupan. – IrishChieftain

Respuesta

1

Después de realizar algunas investigaciones, reuní this blog-post.

me resolvió el problema creando un HttpModule y aplicando un filtro de respuesta , que modifica la salida de la página y mueve el ViewState a la parte inferior del formulario.

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

que es bastante optimista ... ¿qué pasa con las URLs sin extensión o si está utilizando algo más que aspx? No, debería ver si su controlador actual es System.Web.UI.Page o no. bool isAspNetPageRequest = application.Context.Handler es System.Web.UI.Page; –

+0

Entrada muy buena @BurningIce –

2

Puede controlar cómo y dónde se cargan y se guardan los datos de ViewState creando una implementación personalizada de la clase PageStatePersister. Luego, cree una clase base para todas sus páginas ASPX y anule el método PageStatePersister para devolver su implementación personalizada. Esto puede aprovechar los eventos de la página en los que desee almacenar ViewState según sus requisitos.

Me pregunto si vale la pena o no. ¿Está almacenando una tonelada de datos en él ViewState innecesariamente? Tal vez pueda obtener más beneficios con solo usar ViewState o desactivarlo para algunos controles en lugar de simplemente moverlo a un lugar diferente dentro de la página HTML.

0

La extensión de la clase Página le brinda el mayor control sobre la representación de la página. Si desea mover ViewState al pie de una página determinada, use su clase base personalizada para esa página. Si no necesita hacerlo, use la clase Página.

El único riesgo de rendimiento derivado de la clase Page está en su implementación de métodos anulados. A menos que esté haciendo algo particularmente ineficiente, no debería haber ningún golpe de rendimiento perceptible.

Cuestiones relacionadas