2009-08-16 18 views
5

En mi página me dio la siguiente control de usuario:control de usuario ASP.NET y jQuery diálogo

<div class="editFormDialog" style="display: none; font-size: 12px;"> 
    <mm:Form ID="editUC" ShowCreateButton="false" ShowEditButton="true" runat="server" /> 
</div> 

Este UC tiene una propiedad pública que toma un conjunto de datos, y actualiza algunos campos en la UC.

Así que cuando presiono un botón en mi página, llama a esta propiedad en la UC y la UC se actualiza con datos del DataSet.

Hasta ahora todo bien. El problema surge cuando quiero que el UC sea un diálogo de interfaz de usuario jQuery.

Primero crear el diálogo:

$(document).ready(function() { 
    $('.editFormDialog').dialog({ 
     autoOpen: false, 
     height: 700, 
     width: 780, 
     modal: true, 
     bgiframe: true, 
     title: 'Rediger', 
     open: function(type, data) { 
      $(this).parent().appendTo("form"); 
      $(this).css('display', 'block'); 
     } 
    }); 
}); 

Y me wa no para abrir en un pulsador (esto no es un botón de ASP.NET, la versión HTML):

$('#btnEdit').live('click', function() { 
    $('.editFormDialog').dialog('open'); 
}); 

El diálogo se abre, pero la UC no contiene los datos correctos. Cuando se carga la página, la UC se actualiza con los datos predeterminados. Luego, el usuario hace clic en un botón y los datos cambian, pero la UC no se actualiza. Todavía contiene los datos predeterminados. Ese es el problema.

¿Tiene alguna idea de por qué?

Ayuda será muy apreciada!

Respuesta

1

Exactamente qué sucede cuando "llamas la propiedad" (supongo que quieres decir que es un método)? ¿La página realiza una devolución de datos? Si ese es el caso, ¿tal vez la postback se bloquea de alguna manera cuando mezclas jQuery en el escenario?

+0

Hago clic en un botón para obtener la siguiente información. Se produce una devolución de datos. La propiedad en la UC se establece como "editUC.EditData = ds;".La página presenta los nuevos datos. Ahora cuando hago clic en otro botón que hace que aparezca el cuadro de diálogo emergente, el UC todavía contiene los datos predeterminados. Al igual que no ha registrado los cambios en su fuente de datos. Pero si visualizo el UC fuera del diálogo, funciona perfectamente. –

+0

Eso suena extraño: ¿Podría publicar un poco más de su código fuente? –

+0

Todo se coloca dentro de un panel de actualización. ¿Puede ser cuando creo el diálogo, se "mueve fuera" del panel de actualización? ¿Tal vez otra solución podría ser crear el diálogo cada vez que se abre y luego eliminarlo cuando esté cerrado? Por supuesto, colocando los elementos html en el lugar correcto. ¿Pero cómo puedo hacer eso? –

0

Dado que está utilizando Paneles de actualización, ¿cómo está inyectando la llamada al javascript en la página? Pregunto, porque solo hay una forma de que funcione correctamente en las devoluciones de datos parciales: ScriptManager.RegisterStartupScript(). Eso permite que el código de JavaScript actúe como si la página estuviera cargada. Por supuesto, también se puede invocar cualquier otro javascript de carga, lo que puede provocar el comportamiento que estás viendo.

Así,

  1. asegurarse de que su Javascript se inyecta con el gerente de la escritura.
  2. asegurarse de que sólo los bits de javascript que desea ejecutar después de una devolución de datos parciales son ejecutado

También existe la posibilidad de convertir su UC en un control de Ajax con un servicio web para cambiar el origen de datos . No más devoluciones parciales, lo que generalmente mejora la capacidad de respuesta de la página.

2

Encontré la solución para este problema. Resulta que cuando se anexa a la forma, es necesario asegurarse de que este fragmento de código está dentro documento jQuery listo:

$("#dialog1").parent().appendTo($("form:first")); 

Así que todo debe tener este aspecto:

jQuery(document).ready(function() { 
    $("#<%=myFamilyGrid.ClientID %>").tablesorter({ 
     sortList: [[0, 1]] 
    }) 
     .tablesorterPager({ container: $("#pager") }); 


    $("#dialog1").dialog({ 
     modal: true, 
     height: 370, 
     width: "350px", 
     autoOpen: false, 
     bgiframe: false, 
     zIndex: 3999 
    }); 

    $("#dialog1").parent().appendTo($("form:first")); 
}); 

Esperanza ¡esto ayuda!

Cuestiones relacionadas