2009-08-24 16 views
6

Por alguna razón, el estado de visualización de mi aplicación se volvió gigantesco (alrededor de 14 millones de caracteres). Agrega alrededor de 1 minuto de tiempo de carga. Si la página finalmente se carga (lo cual no ocurre a menudo), el servidor se bloquea cada vez que alguien envía un formulario porque "Post size exceeded allowed limits."Viewstate campo oculto tan grande que hace que todo se cuelgue

Apareció de repente. No agregué ningún campo, solo algunos javascript en la página.

La gente me dijo que verificara la división de viewstate. Google me dijo que hiciera esto:

<pages maxPageStateFieldLength="1024"> 

... así que ahora en lugar de un enorme campo oculto que ahora tengo algo así como 100 muy grandes campos ocultos. No es exactamente lo que estaba buscando.

¿Por qué .NET haría algo como esto? ¿Cómo puedo arreglar esto?

+0

¿Existe la posibilidad de que desactive viewstate para algunos de los controles? –

+2

Es difícil de decir sin mirar la página, pero pruebe con un decodificador viewstate para ver qué está incrustado en viewstate. También debe desactivar viewstate de grids/tables si no los necesita y quizás implementar un viewstate comprimido además de activar gzip en IIS. –

+0

Los controles son campos de entrada y no hay manera de desactivar ViewState para esos e incluso si eso fuera necesario, volvería a escribir una gran cantidad de código. También hay como 10 campos, no debería ser tan malo ... ¿verdad? – marcgg

Respuesta

7

se recomienda usar una utilidad para decodificar el estado de vista para que pueda tener una idea de lo que realmente está dentro de ella (ya que es obvio que tienen una gran cantidad de información allí no parecen necesitar.)

Un viewstate decoder le permitirá ver qué hay en su ViewState que no está esperando. A continuación, puede modificar su código, eliminar el control ofensivo o deshabilitar selectivamente viewstate (utilizando el atributo EnableViewState="false") para los controles que no deberían tenerlo habilitado.

+0

Gracias, se ve muy bien, voy a probar esto en este momento – marcgg

+0

Eso es molesto, el software se cuelga, aparentemente la cadena es demasiado grande. Pero ahora sé que mi viewstate tiene 13 428 604 caracteres de longitud :) – marcgg

+0

Finalmente se ejecutó sin fallar en mi quinto intento :) Parece que está poniendo toda mi página en el estado de vista ... es bastante extraño. Trataré de ver cuál es la lógica aquí y volver a SO – marcgg

3

Tenga en cuenta que los controles conservarán sus valores en las devoluciones de datos sin viewstate. A menudo puede deshabilitar viewstate para muchos de sus controles sin ningún problema. Para desactivar el estado de vista para un conjunto específico de control:

EnableViewState="false" 

Si se establece este para todas sus rejillas y los controles que no necesitas viewsate para que reducirá significativamente el tamaño.

+0

Lo hice y no cambió nada. Estoy incluidoarchivos ascx como este: y hay una gran cantidad de JS pasando allí. ¿Podría estar vinculado? Inhabilité viewstate para estos y no lo solucionó – marcgg

+0

¡Lo descubrí (ver respuesta aceptada)! Acepté beska porque es la respuesta que me ayudó a resolver el problema, pero la tuya también fue útil ... así que +1 y muchas gracias :)! – marcgg

Cuestiones relacionadas