Debo ignorar el ocasional no Válido viewstate de error?

Cada ahora y después (una vez cada día o así) estamos viendo los siguientes tipos de errores en nuestros registros para un ASP.NET 3.5 aplicación

  • No válido viewstate
  • No válido de devolución o de devolución de llamada argumento

Son estos, algo que «simplemente sucede» de vez en cuando con un ASP.NET aplicación? Alguien podría recomendar pasamos un montón de tiempo tratando de averiguar lo que está causando los problemas?

10 Kommentare

  1. 50

    Bueno, depende. No válido viewstate puede suceder por una variedad de razones.

    1. Viewstate es demasiado grande y no ha terminado de procesarse antes de que un usuario hace una devolución de datos en la página. La solución general es deshabilitar todos los controles que desencadenan las devoluciones de datos y posibilitar el lado del cliente una vez que la página haya terminado de cargar – ver http://blogs.msdn.com/tom/archive/2008/03/14/validation-of-viewstate-mac-failed-error.aspx
    2. Está utilizando viewstate MACs (y debe ser, por razones de seguridad), pero no ha establecido una clave de equipo y el grupo de aplicaciones se ha reciclado la generación de una nueva. No olvides poner un ViewStateUserKey.
    3. Alguien está utilizando una versión antigua de internet explorer en el mac donde se trunca campos ocultos de formulario. En este caso tendrás que mover viewstate de la página en el estado de sesión.
    4. Viewstate problemas de MAC suelen indicar que usted está en una granja de servidores web y se han olvidado de establecer un máquina clave en la web.config. Sin embargo, si usted ha hecho esto, entonces es probablemente alguien tratando de hacer cosas malas (bots publicación de comentarios, alguien tratando de provocar eventos para personas de movilidad controles, etc.) La causa de estos debe ser rastreado si sólo para descartar posibles problemas de seguridad.

    Hagas lo que hagas no apague viewstate o evento de validación.

    • Puedes dar más detalles sobre el punto 2?
    • Bien viewstate contiene una firma de guardia en contra de alguien, la edición de la misma en el lado del cliente. Que la firma se genera a partir de la clave del equipo para el servidor. A menos que usted establezca una clave de equipo específicamente se pone regenerado cuando el grupo de aplicaciones se reinicia, provocando que todos los anteriores viewstates de ser válida. Si usted tiene la autenticación de usuario también se debe establecer un ViewStateUserKey de protección contra CSRF.
  2. 7

    Una cuestión que se puede hacer con los usuarios de routers de truncar los campos de formulario. La forma de evitar esto es para establecer el MaxPageStateFieldLength a un pequeño número (como 100) en la web.config y el ViewState se rompe en pequeños trozos. Es muy simple de hacer, y este artículo explica completamente.

    • es este cambio que me ayude a evitar «Base64» errores ?
  3. 4

    Excepciones, no «acaba de pasar» de vez en cuando. Ellos siempre ocurren por razones válidas, algunas de las cuales ya se han enumerado en las otras respuestas.

    Sin embargo, para aliviar los problemas con ViewState considerar la posibilidad de deshabilitar por completo. Como ASP.NET los desarrolladores a menudo tendemos a utilizar ViewState en todo tipo de lugares, donde no es necesario porque es la predeterminada. Yo suelo pensar en el uso de html estático antes de considerar el uso de un control. Si usted decide utilizar un control de pensar si realmente necesita ViewState para ser habilitado. La desactivación de que a menudo conducen a mejores tiempos de carga de página, así que si puedes, hazlo.

    Me gustaría que fueron deshabilitados por defecto, de modo que se vieron obligados a pensar de esta manera, pero no lo es.

    Actualización para responder a comentario:

    De la parte superior de mi cabeza me vienen con 3 oportunidades para desactivar ViewState.

    1. Deshabilitar el ViewState si los datos se cargan en cada devolución de datos. Esto suele ser el caso si usted está construyendo AJAX habilitado sitios (que real AJAX no es que UpdatePanel tipo 😉 ), donde por lo general la carga de datos en la primera carga y, a continuación, volver a cargar/actualizar datos mediante peticiones AJAX. En algunos casos puede incluso cargar los datos en cada visita para el único propósito de que la desactivación de ViewState y, a continuación, almacena en caché los datos en el servidor en lugar.

    2. También puede considerar la posibilidad de deshabilitar ViewState si databind a los contenidos que en realidad es estática. A veces me encuentro a una lista que está enlazado a datos a una pequeña estática base de datos de la tabla en la base de datos o algo por el estilo. Ahora, esto puede ser peligroso, pero si estoy convencido de que los datos no lo cambio yo podría mover los datos en la página como contenido estático (se puede envolver en un control independiente de modo que usted no tendrá varias copias estáticas de los datos). Pero si los datos a continuación, HACER el cambio, usted tendrá que cambiar manualmente.

    3. Controles simples, tales como Etiquetas a menudo son buenos candidatos para la desactivación de ViewState.

    Finalmente usted puede cambiar a ASP.NET marco de MVC y decir adiós a estos problemas para siempre, que es lo que estoy planeando hacer, incluso si tendré que enfrentar otros problemas. 😉

  4. 2

    no válido estado de vista no tiene ningún valor para su registro o para los usuarios o para su sitio web,los usuarios Finales nunca ve los errores.
    para evitar este error, pruebe a añadir lo siguiente En Global.ascx:

    void Application_Error(object sender, EventArgs e)
        {          
                    if (ex is HttpException && ex.InnerException is ViewStateException)
                    {
                        Response.Redirect(Request.Url.AbsoluteUri);
                        return;
                    }
        }

    para más información consultar el siguiente enlace:

    https://www.karpach.com/viewstateexception-invalid-viewstate.htm

  5. 1

    No hay mucho que usted puede hacer acerca de la ex – I de la trampa de tales excepciones y de rebote al usuario a una página de error con un mensaje a lo largo de las líneas de «la página en La que se ha expirado. Esto normalmente ocurre cuando intenta visitar una página en la que ya había entrado en los datos.»

    Creo que esto último más en una bastante grande de las páginas que usan los UpdatePanels. Creo que es cuando el usuario devuelve (o, posiblemente, llama de nuevo) antes de que la página haya terminado de cargar, así que no todo el código javascript que se presenta marcados en el final de la página se ha ejecutado todavía.

    De nuevo, no hay mucho que usted puede hacer acerca de ellos, excepto muestran una adecuada amable mensaje en su página de error.

  6. 1

    He tenido este tipo de excepción en los registros de mi y tenía una muy diferente a causa de los otros mencionados aquí. Yo tenía una muy grande ViewState, que es parte del problema. Pero que se combina con otro problema a causa de estas excepciones (y posiblemente de malo ocasional respuestas de IIS).

    La base de código en el que estoy trabajando tiene algunas de fantasía en el código para evitar la doble clics, y como parte de los que se añade algunas cosas para el javascript de cada evento click del botón que desactiva el botón después de que el primero haga clic en y, a continuación, hace la costumbre de devolución. Pero llamar a la devolución como que era un problema debido a que algunos de los botones de mi ya tenía una devolución de llamada generada por .RED automáticamente. Así que yo estaba a punto de terminar para arriba con el doble de las devoluciones de datos, uno de los cuales había un inválido ViewState. La eliminación de la extra de devolución dejado las excepciones para mí.

    Sé que debería realmente estar reduciendo drásticamente el tamaño de ViewState, pero este es un gran legado de la base de código y un cambio como el que iba a ser muy invasiva.

  7. 0

    Probablemente no es una buena idea ignorar este error. Además de todas las respuestas de arriba, usted puede desear considerar el mirar en el tamaño de su viewstate es. Un gran viewstate puede ser truncado por un servidor proxy.

    Si su estado de vista es grande, podría ser una buena idea usar un ASP.net seguimiento para ver qué controles están utilizando viewstate, y donde puede desactivar esta opción.

    • ¿Qué considera usted que ser un grande (o muy grande) viewstate?
  8. 0

    Según Wayne Walter Berry en este blog a otro culpable puede ser el uso de la XHTML doctype en IE8 sin tener compatible con XHTML marcado de la página. Esto puede causar que el IE8 para enviar revueltos parámetros para scriptresource.axd y tirar la inválida viewstate excepción.

    Se recomienda asegurarse de que todos los bloques de javascript están envueltos con //<![CDATA[]]> o simplemente cambiar el doctype (que podría causar que otras css/estilo a los problemas en su página).

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea