2010-11-26 13 views
5

Pude haber entendido mal cómo funciona AJAX. ¿Alguien puede arrojar algo de luz sobre el siguiente escenario simplificado:¿He entendido mal por completo a ASP.Net AJAX (Panel de actualización)?

Tengo una aplicación web asp.net. En una página hay un control de usuario dentro de un panel de actualización (sin propiedades modificadas) y un administrador de scripts.

En el control de usuario y en el formulario hay una etiqueta, ambos obtienen su texto establecido en DateTime.Now.ToString en el evento de carga. También hay un botón que causa una publicación en el control del usuario.

Cuando hago clic en el botón, como espero, la etiqueta dentro del control de usuario se actualiza y la etiqueta de la página ahora sí. Hasta aquí todo bien.

Sin embargo ... el evento de carga de página en la página hace se procesan con IsPostBack = True (que no esperaba), y parece que todo lo que sucede en el caso de la carga no se empuja de nuevo a la cliente (ya que la etiqueta no se actualizó).

No esperaba que el evento de carga de página (en la página que contiene el control de usuario) se generara y procesara cuando se actualiza un panel AJAX, ¿es correcto? o estoy haciendo algo mal? Recuerdo haber leído algo sobre Page.IsCallback, pero eso es falso, así que tal vez eso no tiene nada que ver con esto.

+0

Creo que el kit de herramientas de control ajax es un completo desastre y el código de JavaScript que se genera es realmente malo. Le recomendaría que en su lugar aprenda javascript y ajax cómo se debe hacer y tal vez use un marco de JavaScript como jquery para resolver sus problemas. –

+0

@Tomas, aunque estoy de acuerdo en que Ajax Control Toolkit es un desastre, creo que si todavía está trabajando dentro del marco ASP.NET tradicional, los UpdatePanels siguen siendo el camino a seguir la mayor parte del tiempo. Pero desea aprender cómo ser muy selectivo sobre qué componentes tienen habilitado ViewState, siendo el valor predeterminado falso. Dicho esto, todo el paradigma ASP.NET tradicional es un error y sugeriría un marco MVC como ASP.NET MVC en combinación con un comando de Javascript y JQuery. –

+0

@Stephen: Puede hacer cosas "ok" en los formularios web antiguos si evita los UpdatePanels. Puede definir servicios que vuelvan json y realicen llamadas contra aquellos con jquery en lugar de hacer devoluciones de datos regulares. Solo he estado en un proyecto usando UpdatePanels y estoy contento de haberlo puesto que me abrió los ojos en cuanto a cómo no debería resolver un problema similar. –

Respuesta

4

Bueno, esta pregunta no es sobre AJAX per se, sino sobre UpdatePanel basado en AJAX de Microsoft, que es una bestia compleja. La explicación simple de la forma en que funciona UpdatePanel es que todo funciona igual que un "postback" de página completa normal (ViewState POSTed al servidor, el DOM del lado del servidor se recrea, todos los eventos del ciclo de vida del evento de la página se ejecutan) excepto al final, la respuesta prestada al cliente solo incluye el subconjunto de HTML necesario para actualizar el contenido del UpdatePanel desde el que se inició la solicitud AJAX. Hay algunas sutilezas y complejidades adicionales en juego, pero esta es la idea básica.

2

Todos los eventos del ciclo de vida de la página se ejecutan incluso con devoluciones parciales. Se puede diferenciar entre una devolución de datos completa y parcial de una devolución de datos mediante el procedimiento siguiente:

if (ScriptManager.GetCurrent(this).IsInAsyncPostBack) 
    { 

    } 
+0

¡¡¡Rock !! muy apreciado –

1

Sin ver algunas muestras de lo que estás haciendo, no creo que es posible decir si está haciendo algo mal.

Pero, sí, los paneles de actualización todavía invocan la mayor parte del ciclo de vida de la página en el lado del servidor. Si lo que está buscando es evitar el ciclo de vida de la página, los métodos de la página pueden ser más de su gusto. Sin embargo, requieren pasar el rato con javascript.

http://forums.asp.net/p/1070297/1571597.aspx

0

Durante una devolución de datos todos los eventos del ciclo de vida de la página se ejecutan de nuevo y la página se recrea y se resienten al cliente.

Un UpdatePanel básicamente realiza una devolución de datos completa, pero solo los controles dentro del panel de actualización se actualizan en el cliente. Por lo tanto, cualquier control fuera del panel de actualización no se actualizará aunque pueda cambiar su valor en el servidor.

Puede usar la propiedad Page.IsPostBack para comprobar si está realizando la carga inicial de la página o una devolución de datos.por ejemplo, solo hacer algo la primera vez que carga la página:

if (!Page.IsPostBack) 
{ 
    //doSomething 
} 
Cuestiones relacionadas