update trigger net ejemplos asyncpostbacktrigger asp asp.net asp.net-ajax updatepanel

asp.net - trigger - updatepanel postback



Validadores ASP.NET dentro de un UpdatePanel (4)

@Jonathan Holland: ¿Qué hay de malo con el uso de Validators.dll?

Debido a que reemplazan las clases originales, está pasando por alto silenciosamente cualquier error y corrección de seguridad, mejoras, etc. que Microsoft pueda lanzar en el futuro (o que ya haya sido liberado). A menos que mires detenidamente el archivo web.config, es posible que nunca notes que te estás saltando parches.

Por supuesto, debes evaluar cada situación. Si está absolutamente atascado con .NET 2.0 RTM, entonces Validators.dll es mejor que nada.

Estoy usando una versión anterior de ASP.NET AJAX debido a las limitaciones de tiempo de ejecución. La colocación de un Validador de ASP.NET dentro de un panel de actualización no funciona. ¿Hay algún truco para hacer que esto funcione, o necesito usar el control Validator CallOut que viene con el kit de herramientas de AJAX?


@jmein

En realidad, el problema es que las secuencias de comandos del cliente Validator no funcionan cuando se colocan dentro de un panel de actualización (actualización de UpdatePanels usando .innerHTML, que agrega los nodos de script a nodos de script, por lo que el navegador no los ejecuta).

La solución fue un parche lanzado por Microsoft que soluciona este problema. Lo encontré con la ayuda de Google.

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


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

Hasta principios de 2007, los controles del validador no eran compatibles con los Paneles de actualización. Esto se resolvió con el SP1 de .NET Framework.

El origen del problema es que UpdatePanel puede detectar cambios de marcado en su página, pero no tiene forma de seguir correctamente las secuencias de comandos. Los validadores dependen en gran medida de los scripts. Durante una devolución de datos parcial, los scripts se agotan, no se actualizan o no se ejecutan cuando se supone que deben hacerlo.

En versiones beta iniciales, Microsoft hizo que UpdatePanel intentara adivinar qué scripts necesitaban volver a procesarse o ejecutarse. No funcionó muy bien, y tuvieron que sacarlo.

Para evitar el problema inmediato, Microsoft lanzó una versión parcheada de las clases de validación en una nueva DLL llamada Validators.DLL, y dio instrucciones sobre cómo decirle a ASP.NET que use esas clases en lugar de las reales. Si busca el nombre de esa DLL, busque más información. Ver también esta publicación en el blog .

Esta fue una medida para detener la mordaza y no debes usarla para evitarla si es posible .

La solución real al problema apareció poco después, en .NET 2.0 SP1. Microsoft introdujo un nuevo mecanismo para registrar scripts en SP1, y cambió las clases de validador reales para usar ese mecanismo en lugar del antiguo.

Déjame darte algunos detalles sobre los cambios:

Tradicionalmente, se suponía que debía registrar scripts a través de métodos de página como Page.RegisterStartupScript () y Page.RegisterClientScriptBlock (). El problema es que estos métodos no fueron diseñados para la extensibilidad y UpdatePanel no tenía manera de monitorear esas llamadas.

En SP1 hay un nuevo objeto de propiedad en la página llamado Page.ClientScripts. Este objeto tiene métodos para registrar scripts que son equivalentes (y de alguna manera mejores) a los originales. Además, UpdatePanel puede monitorear estas llamadas, para que reenvíe o llame a los métodos cuando corresponda. Los métodos anteriores de RegisterStartupScript (), etc. han quedado en desuso. Todavía funcionan, pero no dentro de un UpdatePanel.

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

Buena suerte.


Si por alguna razón no puede usar la versión actualizada de los controles del validador de ASP.NET, es realmente muy fácil validar un grupo de validación usted mismo, todo lo que necesita hacer es llamar

Page_ClientValidate("validationGroupName");

Luego puede usar PageRequestManager para ejecutar la validación según lo necesite.

Definitivamente, utilizar los controles de validación actualizados es el camino a seguir, pero soy bastante partidario de JavaScript;)