2009-08-16 7 views
5

Sur ma page j'ai eu le contrôle utilisateur suivant:contrôle utilisateur ASP.NET et le dialogue jQuery

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

Cette UC a une propriété publique qui prend un DataSet et met à jour certains champs de l'UC. Donc quand j'appuie sur un bouton sur ma page, il appelle cette propriété sur l'UC, et l'UC est mise à jour avec les données du DataSet.

Jusqu'ici tout va bien. Le problème se pose lorsque je veux que l'UC soit une boîte de dialogue jQuery UI.

D'abord, je crée la boîte de dialogue:

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

Et je wan't pour ouvrir sur un bouton poussoir (ce n'est pas un bouton ASP.NET, HTML brut):

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

La boîte de dialogue s'ouvre, mais l'UC ne contient pas les données correctes. Lorsque la page est chargée, l'UC est mise à jour avec les données par défaut. Ensuite, l'utilisateur clique sur un bouton et les données changent mais l'UC n'est pas mise à jour. Il contient toujours les données par défaut. C'est le problème.

Avez-vous une idée pourquoi?

L'aide nous sera très utile!

Répondre

1

Que se passe-t-il exactement lorsque vous "appelez la propriété" (je suppose que vous voulez dire que c'est une méthode)? Est-ce que la page effectue une publication? Si c'est le cas, peut-être que le postback est bloqué quand vous mélangez jQuery dans le scénario?

+0

Je clique sur un bouton pour obtenir les données suivantes. Une publication se produit. La propriété dans l'UC est définie comme "editUC.EditData = ds;".La page arrive avec les nouvelles données. Maintenant, quand je clique sur un autre bouton qui fait le popup Dialog, l'UC contient toujours les données par défaut. Comme il n'a pas enregistré les changements dans sa source de données. Mais si je montre l'UC en dehors de la boîte de dialogue, cela fonctionne parfaitement. –

+0

Cela semble étrange: Pourriez-vous poster un peu plus de votre code source? –

+0

Tout est placé dans un panneau de mise à jour. Est-ce que ce peut être quand je crée la boîte de dialogue, c'est "déplacé dehors" le panneau de mise à jour? Peut-être qu'une autre solution pourrait être de créer le dialogue chaque fois qu'il est ouvert et de le retirer quand il est fermé? Bien sûr, placer les éléments html au bon endroit. Mais comment puis-je faire ça? –

0

Étant donné que vous utilisez des panneaux de mise à jour, comment injectez-vous l'appel au javascript dans la page? Je demande, car il n'y a qu'une façon qui fonctionne correctement sur les publications partielles: ScriptManager.RegisterStartupScript(). Cela permet au code javascript d'agir comme si la page avait été chargée. Bien sûr, tout autre javascript onload peut être appelé aussi, ce qui peut entraîner le comportement que vous voyez.

Ainsi,

  1. assurez-vous que votre javascript est injecté avec le gestionnaire de script.
  2. assurez-vous que les bits de javascript que vous souhaitez exécuter après une publication partielle sont exécutés

Il y a aussi la possibilité de transformer votre UC dans un contrôle ajax avec un service Web pour changer la source de données . Plus de postbacks partiels alors, ce qui améliore généralement la réactivité de la page.

2

J'ai trouvé la solution à ce problème. Il se trouve que lorsque vous ajoutez à la forme, vous devez vous assurer que ce bout de code est à l'intérieur document jquery prêt:

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

Donc tout cela devrait ressembler à ceci:

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

Espoir CA aide!

Questions connexes