2009-08-16 14 views
5

sulla mia pagina ho ottenuto il seguente controllo utente:ASP.NET e dialogo jQuery

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

Questa UC ha una proprietà pubblica che prende un DataSet e aggiorna alcuni campi nella UC.

Così quando spingo un pulsante sulla mia pagina, chiama questa proprietà sull'UC e l'UC viene aggiornata con i dati dal DataSet.

Fin qui tutto bene. Il problema sorge quando voglio che l'UC sia una finestra di dialogo dell'interfaccia utente jQuery.

prima cosa creare il dialogo:

$(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'); 
     } 
    }); 
}); 

E io wan't per aprire su un pulsante (non si tratta di un pulsante di ASP.NET, semplice HTML):

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

Si apre la finestra di dialogo, ma l'UC non contiene i dati corretti. Quando la pagina viene caricata, l'UC viene aggiornata con i dati predefiniti. Quindi l'utente fa clic su un pulsante e i dati cambiano ma l'UC non viene aggiornata. Contiene ancora i dati predefiniti. Questo è il problema.

Avete qualche idea del perché?

L'aiuto sarà molto apprezzato!

risposta

1

Esattamente quello che succede quando "chiami la proprietà" (suppongo tu voglia dire che è un metodo)? La pagina esegue un postback? In questo caso, forse il postback viene bloccato in qualche modo quando mischi jQuery nello scenario?

+0

Ho fatto clic su un pulsante per ottenere i dati successivi. Si verifica un postback. La proprietà nell'UC è impostata come "editUC.EditData = ds;".La pagina esce con i nuovi dati. Ora quando faccio clic su un altro pulsante che fa il popup della finestra di dialogo, l'UC contiene ancora i dati predefiniti. Come se non avesse registrato le modifiche nella sua origine dati. Ma se visualizzo l'UC fuori dalla finestra di dialogo, funziona perfettamente. –

+0

Sembra strano: potresti pubblicare un po 'del tuo codice sorgente? –

+0

È tutto inserito in un pannello di aggiornamento. Può essere quando creo il dialogo, è "spostato all'esterno" del pannello di aggiornamento? Forse un'altra soluzione potrebbe essere quella di creare il dialogo ogni volta che viene aperto e quindi rimuoverlo quando è chiuso? Ovviamente posizionando gli elementi html nel posto giusto. Ma come posso farlo? –

0

Poiché si utilizzano i pannelli di aggiornamento, come si fa a iniettare la chiamata in javascript nella pagina? Chiedo, perché c'è un solo modo che funziona correttamente sui postback parziali: ScriptManager.RegisterStartupScript(). Ciò consente al codice javascript di agire come se la pagina fosse stata caricata. Ovviamente anche qualsiasi altro onload javascript può essere chiamato, il che può comportare il comportamento che si sta vedendo.

Quindi,

  1. assicurarsi che il tuo JavaScript viene iniettato con script manager.
  2. assicurarsi che solo i bit di javascript che si desidera eseguire dopo un postback parziale sono eseguiti

C'è anche la possibilità di trasformare il vostro UC in un controllo Ajax con un servizio web per modificare l'origine dati . Non ci sono più postback parziali, che di solito migliorano la reattività della pagina.

2

Ho trovato la soluzione per questo problema. Si scopre che quando si accoda per il modulo, è necessario assicurarsi che questo frammento di codice si trova all'interno del documento jQuery pronto:

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

Quindi il tutto dovrebbe assomigliare a questo:

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")); 
}); 

Speranza questo aiuta!

Problemi correlati