ASP.Net UpdatePanel ImageButton provoca que "this._postbackSettings.async sea nulo o no sea un objeto"

StackOverflow https://stackoverflow.com/questions/57586

Pregunta

Recibo este error en un panel de actualización dentro de un popupControlExtender que está dentro de un dragPanelExtender.

Veo que muchas otras personas tienen este problema y tienen varias soluciones, ninguna de las cuales me ha funcionado.

Me encantaría escuchar una explicación lógica de por qué ocurre esto y una forma infalible de evitar problemas similares en el futuro.

Descubrí que, al igual que otros, este error no ocurre cuando el disparador es un LinkButton en lugar de un ImageButton, y todavía me pregunto si alguien tiene una explicación.

¿Fue útil?

Solución

Mi mejor suposición es que UpdatePanel no puede escribir correctamente la propiedad "asíncrona" personalizada en la solicitud de devolución.Es probable que esto se deba al bloqueo de uno de los controles que lo envuelven (mi intuición es que es el popupControlExtender; tiende a tener un comportamiento extraño con los paneles de actualización, ya que está destinado a administrar los eventos dentro de él para sus propósitos de mostrar/ocultar).

Recomendaría eliminar el panel de actualización e implementar su propia solución para su necesidad comercial específica de tenerlo allí, o implementar su propio script emergente (probablemente un poco más fácil de escribir).

Por cierto, para algunos antecedentes, "this._postbackSettings.async" es su marco AJAX.NET que intenta determinar si se trata de una llamada asíncrona o no.Es posible que pueda superarlo configurando esto programáticamente antes de que se envíe la devolución (capture el evento de devolución y agregue el campo a la solicitud de devolución si aún no está allí).

Sólo algunas ideas... ¡No creo que haya una respuesta "plug and play" para esta!

Otros consejos

Tuve el mismo problema y realmente no encontré ninguna solución satisfactoria hasta que terminé en http://siderite.blogspot.com/2009/02/thispostbacksettingsasync-is-null-or.html que hace exactamente lo que quiero.

Sólo para evitar problemas con posibles enlaces muertos en el futuro, aquí está el código:

var script = @"
if (Sys &&
    Sys.WebForms && Sys.WebForms.PageRequestManager &&
    Sys.WebForms.PageRequestManager.getInstance) 
{
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    if (prm &&
       !prm._postBackSettings)
    {
        prm._postBackSettings = prm._createPostBackSettings(false, null, null);
    }";

ScriptManager.RegisterOnSubmitStatement(
    Page, 
    Page.GetType(), 
    "FixPopupFormSubmit", 
    script);

En el caso de un envío sin _postBackSettings configurado, los crea, lo que hace que la excepción de referencia nula desaparezca cuando _postBackSettings.async esté disponible.

Espero que esto ayude,

GRAMO.

Establecer "EnablePartialRendering" en falso en el control ScriptManager evita el error, pero no es una solución óptima.Perder el beneficio del renderizado parcial podría ser un gran problema, dependiendo de su aplicación.

Solo para que conste, no estaba haciendo exactamente lo mismo que otras personas que vieron el error.Tengo un PopupControlExtender, en el que hay una lista de casillas de verificación.Agregué un enlace "seleccionar todo" con un método javascript para seleccionar/deseleccionar todo mediante programación.No estoy usando un botón de imagen.No vi el error antes de agregar javascript y ahora, incluso después de eliminarlo, el error persiste.Tiene que haber otro cambio que me falta.

Espero que esto ayude a alguien...

--Mate

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