validar solo numeros net mvc formulario asp asp.net validation exception viewstate

solo - ASP.NET: no se puede validar datos



validar formulario asp.net mvc (8)

¿Cuál es la causa de esta excepción en ASP.NET? Obviamente es una excepción de viewstate, pero no puedo reproducir el error en la página que arroja la excepción (un simple formulario de dos cuadros de texto con un botón y enlaces de navegación).

FWIW, no estoy ejecutando una granja web.

Excepción

Mensaje de error: no se pueden validar los datos.

Fuente de error: System.Web

Sitio de destino de error: Byte [] GetDecodedData (Byte [], Byte [], Int32, Int32, ByRef de Int32)

Datos de publicación

VIEWSTATE:

/ wEPDwULLTE4NTUyODcyMTFkZF96FHxDUAHIY3NOAMRJYZ + CKsnB

EVENTVALIDACIÓN:

/ wEWBAK + 8ZzHAgKOhZRcApDF79ECAoLch4YMeQ2ayv / Gi76znHooiRyBFrWtwyg =

Rastreo de pila de excepción

at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) at System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) at System.Web.UI.HiddenFieldPageStatePersister.Load() at System.Web.UI.Page.LoadPageStateFromPersistenceMedium() at System.Web.UI.Page.LoadAllState() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest() at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) at System.Web.UI.Page.ProcessRequest(HttpContext context) at ASP.default_aspx.ProcessRequest(HttpContext context) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

~ William Riley-Land


"se cancela una devolución de datos antes de que se cargue todo el ViewState"

He tenido este problema exacto antes, y esta fue la causa.

Inicialmente desactivamos la propiedad ViewStateMac ( enableViewStateMac="false" en la directiva de la page ) para resolverlo, pero esta no es una verdadera solución al problema y puede amenazar la integridad de los datos. Finalmente lo resolvimos desactivando nuestro botón de envío hasta que la página se cargó por completo, y reducimos el tamaño de nuestro estado de visualización inhabilitándolo en algunos controles.


En .NET 3.5 SP1, la propiedad RenderAllHiddenFieldsAtTopOfForm se agregó a la configuración de PagesSection.

Web.config

<configuration> <system.web> <pages renderAllHiddenFieldsAtTopOfForm="true"></pages> </system.web> </configuration>

Curiosamente, el valor predeterminado de esto es verdadero. Entonces, en esencia, si usa .NET 3.5 SP1, el ViewState se renderiza automáticamente en la parte superior del formulario (antes de que se cargue el resto de la página), eliminando así el error de ViewState que está recibiendo.


Encontré la raíz de este problema en mi sitio web y finalmente logré resolverlo . Esta no es una respuesta directa a su pregunta, pero quería compartir esta pequeña información.

En el pasado probé todo (incluida la solución propuesta por Jeffaxe, arriba) pero sin resultado, y no quería establecer enableViewStateMac="false" (como menciona Raelshark arriba) en mi página, porque esto simplemente oculta el problema .

¿Qué causó el problema en mi caso? El problema fue causado por el uso del módulo Intelligencia.UrlRewriter (Versión 2.0 RC 1 build 6) en ciertas páginas de mi sitio web. Estaba usando algunos enlaces amigables con SEO y eso estaba causando la falla de validación de ViewState. Cuando usé enlaces "normales" (en lugar de los enlaces compatibles con SEO) el problema desapareció.

Reproduje el problema varias veces para asegurarme de que no fuera una falsa alarma (utilizo ASP.NET 3.5).

Sé que algunos de ustedes no pueden usar el módulo anterior y aún así obtener este error, lo que implica que la causa es otra cosa. Al menos, compartir esta experiencia podría ser útil para algunos.


Esta herramienta gratuita en línea: http://aspnetresources.com/tools/machineKey genera un elemento machineKey en el elemento system.web en el archivo web.config. Aquí hay un ejemplo de lo que genera:

<machineKey validationKey="1619AB2FDEE6B943AD5D31DD68B7EBDAB32682A5891481D9403A6A55C4F91A340131CB4F4AD26A686DF5911A6C05CAC89307663656B62BE304EA66605156E9B5" decryptionKey="C9D165260E6A697B2993D45E05BD64386445DE01031B790A60F229F6A2656ECF" validation="SHA1" decryption="AES" />

Una vez que vea esto en su web.config, el error en sí mismo de repente tiene sentido. El error que recibes dice

"asegúrese de que la configuración especifique el mismo algoritmo de validación y validación".

Cuando miras este elemento MachineKey, de repente puedes ver de qué está hablando.

Al "codificar" este valor en su web.config, la clave que asp.net utiliza para serializar y deserializar su viewstate se mantiene igual, sin importar qué servidor de un servidor lo recoja. Su encriptación se convierte en "portátil", por lo tanto su viewstate se vuelve "portátil".

También estoy adivinando que quizás el mismo servidor (no en una granja) tenga este problema si por alguna razón "olvida" la clave que tenía, debido a un reinicio en cualquier nivel que lo borre. Esa es quizás la razón por la que ve este error después de un período de inactividad y trata de usar una página "obsoleta".


He experimentado el problema con ciertas versiones específicas de Safari 3. Mi solución fue mover ViewState a la parte superior del formulario (extendí la clase de página y sobrescribí el método Render para pre-3.5 SP1 o .Net 3.5 SP1 y posterior lo hace de forma predeterminada) y para dividir el ViewState en varios campos diferentes en lugar de un archivo de monstruos. Ver ViewState Chunking en ASP.NET 2.0 (maxPageStateFieldLength)


La causa más probable de este error es cuando se detiene una devolución de datos antes de que todo el estado de visualización se cargue (el usuario pulsa los botones de detener o retroceder), viewstate no podrá validar y arrojar el error.

Otras causas potenciales:

  • Un reciclaje de grupo de aplicaciones entre el momento en que se generó viewstate y el momento en que el usuario lo publica en el servidor (improbable).
  • Una granja de servidores web donde las MachineKeys no están sincronizadas (no es su problema).

Actualización: artículo de Microsoft sobre el tema . Además de lo anterior, sugieren otras dos posibles causas:

  • Modificación de viewstate por firewalls / software antivirus
  • Publicación de una página aspx a otra.

No estoy seguro si esto ayudaría a alguien, pero mi solución fue la exclusión de machineKey en mi webconfig para que mi cookie se aprobara.


Obtuve este error cuando tenía una configuración de etiqueta de formulario en mi página sin un atributo de acción, y luego en el código subyacente, cambié el atributo de acción del formulario a "Acción.aspx".

Y en JavaScript, envié el formulario (theForm.submit ();)

Creo que en mi caso fue un problema de seguridad, y que no puedes cambiar esto después de que ya se haya configurado en la página ...