Pregunta

Estoy usando una versión anterior de ASP.NET AJAX debido al tiempo de ejecución de las limitaciones, la Colocación de un ASP.NET Validador en el interior de un panel de actualización no funciona.Hay un truco para hacer estos trabajos, o tengo que usar el ValidatorCallOut el control que viene con el AJAX toolkit?

¿Fue útil?

Solución

Sospecho que está ejecutando la versión original (RTM) de .NET 2.0.

Hasta principios de 2007, los controles de validación no son compatibles con los UpdatePanels.Esto fue resuelto con el SP1 de el .NET Framework.

El origen del problema es que UpdatePanel puede detectar marcado los cambios en su página, pero no para el seguimiento de secuencias de comandos correctamente.Los validadores se basan en gran medida en los guiones.Durante una devolución parcial, las secuencias de comandos son flipado, no actualizados, o no se ejecuta cuando la que están diseñadas.

En las primeras betas, MS tenido el UpdatePanel intentar supongo lo de los scripts necesarios para ser re-prestados o ejecutar.No funcionó muy bien, y tuvieron que llevarlo a cabo.

Para obviar el problema inmediato, Microsoft lanzó un parche para la versión del validador de clases en un nuevo archivo DLL llamado Validators.DLL y le dio instrucciones sobre cómo saber ASP.NET para el uso de esas clases en lugar de las de verdad.Si Google para el nombre de la DLL, usted debe encontrar más información.Ver también Este blog.

Este fue un lugar de parada de la mordaza a medida y debe no lo uso evitar, en lo posible,.

La solución real para el problema llegó poco después, en .NET 2.0 SP1.Microsoft introdujo un nuevo mecanismo para registrar secuencias de comandos en el SP1, y cambió la real validador de clases para el uso de ese mecanismo en lugar de la anterior.

Permítanme darles algunos detalles sobre los cambios:

Tradicionalmente, se supone que para registrar secuencias de comandos a través de la Página de métodos tales como la Página.RegisterStartupScript() y de la Página.RegisterClientScriptBlock().El problema es que estos métodos no fueron diseñados para la extensibilidad y Él no tenía forma de controlar las llamadas.

En el SP1 no es una nueva propiedad de objeto en la página que se llama la Página.ClientScripts.Este objeto tiene métodos para registrar secuencias de comandos que son equivalentes (y en algunos aspectos mejor) a los originales.También, Él puede controlar estas llamadas, por lo que se vuelve a procesar o llama a los métodos cuando sea apropiado.La mayor RegisterStartupScript(), etc.los métodos han sido censurados.Que todavía funcionan, pero no dentro de un UpdatePanel.

No hay ninguna razón (aparte de la política, supongo) a la no actualización de sus instalaciones .NET 2.0 SP1.Los Service Packs de realizar correcciones importantes.

La buena suerte.

Otros consejos

@Jonathan Holland:Lo que está mal con el uso de Validators.dll?

Desde que reemplazar el original de las clases, en silencio evitando cualquier correcciones de errores y seguridad, mejoras, etc.que Microsoft podría lanzar en el futuro (o podría tener ya en libertad).A menos que usted mira cuidadosamente en la web.config, puede ser que nunca te darás cuenta de que estás omitiendo los parches.

Por supuesto, usted tiene que evaluar cada situación.Si usted está absolutamente limitado a usar .NET 2.0 RTM, entonces Validators.dll es mejor que nada.

@jmein

En realidad el problema es que el Validador cliente del script no funciona cuando se coloca dentro de un updatePanel (UpdatePanels actualización de usar .innerHTML, que añade a la secuencia de comandos de nodos los nodos de texto, no de secuencia de comandos de nodos, por lo que el navegador no se ejecuta ellos).

La solución fue un parche publicado por microsoft que corrige este problema.Me encontré con la ayuda de Google.

http://blogs.msdn.com/mattgi/archive/2007/01/23/asp-net-ajax-validators.aspx

Si por alguna razón usted no puede utilizar el udpated versión de la ASP.NET los controles de validación en realidad es muy fácil de validar un grupo de validación a ti mismo, todo lo que necesita hacer es llamar a

Page_ClientValidate("validationGroupName");

A continuación, puede utilizar el PageRequestManager ejecutar la validación como usted necesita.

Definitivamente el uso de la actualización de los controles de validación es el camino a seguir, pero estoy bastante parcial a JavaScript ;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top