asp.net viewstate webforms

asp.net - viewstate c#



ASP.NET: mover ViewState a la parte inferior de la página (3)

¿Cuáles son las últimas y mejores formas de mover ViewState a la parte inferior de la página?

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

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

Otras opciones es que esto podría hacerse en un IHttpModule , pero eso no es tan efectivo , ya que interceptará todas las solicitudes.

También podría hacerse en una clase derivada de la clase Page o MasterPage , pero esto no es tan modular .

¿Hay alguna penalización en el rendimiento de esto?


Después de realizar algunas investigaciones, reuní esta publicación de blog .

Resolví el problema creando un HttpModule y aplicando un filtro de respuesta , que modifica el resultado de la página y mueve el ViewState al final 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; } // [...]


La extensión de la clase Page 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.


Puede controlar cómo y dónde se cargan y 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.

Sin embargo, me pregunto si vale la pena. ¿Está almacenando una tonelada de datos en ViewState innecesariamente? Tal vez pueda obtener más beneficios fácilmente al usar ViewState menos o desactivarlo para algunos controles en lugar de simplemente moverlo a un lugar diferente dentro de la página HTML.