sábado, 3 de octubre de 2009

Ajax .Net: ¿Por qué desaparece el ModalPopup al escoger un item en el DropDownList?

Cada vez que ocurre un PostBack o un AutoPostBack dentro de un ModalPopupExtender, éste se cierra. La solución más rápida es poner éste código en el Head para poder mantener el estado del ModalPopupExtender.

Nota: El control ModalPopupExtender debe tener El atributo BehaviorID con un valor cualquiera. Dicho valor se puede usar en el código JS para poder hacer referencia al mismo de una forma más rápida.

<script type="text/javascript">

var _estadoModal;
function pageLoad() {
$addHandler($get("btnSalir"), "click", OnSalir_Click);

var mpe = $find("mpe");
mpe.add_shown(OnShowModal);

if (_estadoModal)
mpe.show();
}

function OnShowModal(sender) {
_estadoModal = true;
}

function OnSalir_Click(sender) {
_estadoModal = false;
}

</script>

Si en la variable "_estadoModal" está el valor true, entonces
se vuelve a ordenar que el ModalPopup se muestre. Esto hace
que le caiga encima a la instancia anterior que en realidad
ya esta muerta; lo que pasa es que el updatePanel no se a
refrescado y por eso parece que el ModalPopup nunca desapareció
de la pantalla, el efecto es rápido y parece que el Modalpopup
no se cierra.

Si en la variable "_estadoModal" está el valor "false",
entonces el ModalPopup desaparece ya que el Postback hace que
se cierre el ModalPopup y por ende el UpdatePanel se refresca
borrando la imagen del ModalPopup que se estaba mostrando.

NOTA: CUALQUIER OBJETO QUE HAGA UN POSTBACK O UN
AUTOPOSTBACK PROVOCAN QUE EL MODALPOPUPEXTENDER
SE CIERRE DE INMEDIATO. SIENDO MÁS ESPECÍFICOS,
EL MODALPOPUPEXTENDER SE CIERRA PORQUE ESTE
CONTROL NO MANTIENE SU ESTADO EN EL LADO DEL
CLIENTE DESPUÉS DE CADA POSTBACK O AUTOPOSTBACK.

Descargar ejemplo

6 comentarios:

fernando yevenes dijo...

no no sale ...tienes un ejemplo ...
el gran error es que tengo el postback para poder saber el indexchange del control dropdownlist y funciona bien como un control , sin embargo lo agrego a un modalpopupextender y desaparece con dropdownlist postback=true ..yt si no lo agrego asi no busca los datos del metodo

zeroyevi@gmail.com

en vb.net con un modal.show despues de gatillar el evento solucionado ...c# mmm no hay caso

Leonardo Suárez dijo...

Ya puse un ejemplo en la entrada para que lo puedas bajar!

fernando yevenes dijo...

ok leandro funciono =) tube que hacer un ajuste de traspaso a un proyecto prueba ya que no mandas la socucion de proyecto ... detalles jejej

http://fyevenes.blogspot.com/

fernando yevenes dijo...

lo provee para un formulario ascx y no funciona igual el post no se pierde sin enbargo el selectvalue del dropdownlist vuelve a -1 ....

Juan Alberto dijo...

es mejor utilizar un updatePanel?

Ing. Leonardo Suárez. dijo...

Ya hace un tiempo publiqué un ejemplo muy sencillo para descargar. Se puede ver en el ejemplo el uso de un UpdatePanel.

Cuando usamos drodownlists dentro de un UpdatePanel, siempre desaparece el modalpopupextender si el dropdownlist tiene activo AutoPostback. Para evitar ese efecto, se usa el código de javascript que también va en el ejemplo.

Suerte!