2009-11-04 8 views
1

J'ai un DIV dans lequel j'ai un asp: répéteur qui, sur la base des données, met des informations dans ce div. J'utilise ensuite la boîte de dialogue d'interface utilisateur de Jquery pour afficher les données à l'utilisateur via un clic de bouton. Tout cela fonctionne bien. Donc, je veux être en mesure d'ajouter des enregistrements aux données qui remplissent le répéteur. J'ai une autre partie de l'écran où les gens peuvent entrer ces données, et il est enregistré dans la base de données en utilisant un appel ajax. Cela aussi fonctionne bien. Je veux ensuite mettre à jour les données sur ma boîte de dialogue, sans avoir à effectuer une publication complète sur le serveur. Donc, c'est normalement assez facile. J'ai mis mon div dans un UpdatePanel, et à partir de Jquery lancer un __doPostBack. qui actualise ensuite les données, ce qui fonctionne aussi bien jusqu'à un certain point.Jquery UI Dialog à l'intérieur UpdatePanel faire des choses étranges

Une fois le __doPostBack terminé, le div n'est plus masqué. Il est maintenant affiché sur ma page (avec les données mises à jour faites attention à vous), mais le javascript que j'utilise pour montrer la boîte de dialogue, maintenant ne fonctionne plus.

Certaines enquête montre que:

  1. Sur charge initiale de la page, le javascript qui indique jquery pour créer une boîte de dialogue à partir d'une div prend la div où que ce soit sur la forme, et l'ajoute à la élément de corps.
  2. Lorsque le panneau de mise à jour affiche, le div est recréé, mais le javascript pour le transformer en un dialogue n'est pas encore exécuté (ce que je peux comprendre ... nous n'avons pas fait un plein chargement de la page, de sorte que le doesnt javascript encore exécuter
  3. Cela signifie que le div n'est plus un « dialogue » mais un simple div sur ma page, ce qui est pas ce que je veux

alors, mes questions sont est..:

Existe-t-il un moyen d'injecter javascript après la mise à jour de l'updatepanels qui va s'exécuter et créer de nouveau correctement la boîte de dialogue?

+0

À moins que __doPostBack (ou les panneaux de mise à jour) ne puisse rappeler une fonction personnalisée, je ne vois pas comment vous pourriez faire cela. –

+0

pouvons-nous voir le code faire cela? –

+1

J'ai travaillé autour de cela. Au lieu d'utiliser un panneau de mise à jour pour actualiser le contenu de ma grille, je renvoie le code HTML via un appel ajax, et définit le innerhtml de la div après que l'insertion est terminée. Fonctionne bien, et aucun panneau de mise à jour requis. – tardomatic

Répondre

1

La solution serait de ne pas utiliser Updatepanel du tout et juste changer le innerHTML de la div avec les données reçues via un appel jquery ajax.

+0

merci, comme vous pouvez le voir dans mes commentaires, c'est exactement ce que j'ai fini par faire. – tardomatic

1

J'ai trouvé une autre solution à cela. J'ai mis l'initialisation de javascript de dialogue dans une fonction séparée appelée SetupDialog au lieu d'être dans le bloc $(function() { });.

Puis je ScriptManager.RegisterStartupScript dans Page_Load pour enregistrer le script pour qu'il fonctionne à chaque fois que les mises à jour du panneau de mise à jour:

ScriptManager.RegisterStartupScript(this, GetType(), "SetupDialog", "SetupDialog();", true); 

Dans ce cas, la boîte de dialogue ne fonctionne après l'UpdatePanel a été mis à jour. Si vous avez besoin de la boîte de dialogue avant cela, vous pouvez également appeler SetupDialog à l'intérieur du bloc $(function() { });.