2010-08-19 27 views
1

J'ai un bouton "Enregistrer" sur un FormView avec le jeu CommandName = "Mise à jour". Ce bouton met à jour un EntityDataSource lié au FormView. Après la mise à jour de l'EDS, je souhaite fermer cette fenêtre (enfant, fenêtre contextuelle) et rafraîchir ma fenêtre parente (afin qu'elle reflète les modifications apportées aux données).Comment mon bouton peut-il fermer la fenêtre et actualiser le parent après la mise à jour de formview?

Pour référence, j'ai un même bouton « Annuler » sur cette page qui appelle simplement une fonction Javascript « OnClientClick »:

function done() { 
    if (window.opener.closed) { 
     self.close(); 
    } else { 
     window.opener.focus(); 
     window.opener.location.href = opener.location; 
     self.close(); 
    } 
} 

Maintenant, comment puis-je laisser le FormView et EDS faire son travail (processus la commande Update) puis appelez cette fonction javascript (ou code pour accomplir l'équivalent) ??? Après avoir creusé un peu plus, j'ai résolu le problème. Le problème était lié au fait que FormView se trouvait dans un panneau de mise à jour. Je devais utiliser les éléments suivants:

ScriptManager.RegisterClientScriptBlock(this.UpdatePanel1, typeof(string), "done", "done();", true); 
+0

Était-ce un dialogue modal? Je m'inquiéterais d'être compaabulable par navigateur. – Jeroen

+0

Non, juste une page aspx. Il doit seulement fonctionner avec IE et c'est le code qui s'exécute sur un serveur Web JSP que je porte sur .Net. Le script a fonctionné pour nos utilisateurs sans problèmes pendant des années. J'ai juste besoin de comprendre comment l'appeler (ou accomplir la même chose) du code derrière. :) – Shayne

Répondre

0

Dès que votre mise à jour terminée, il doit retourner une page que vous pouvez simplement enregistrer votre fonction avec. Dans votre gestionnaire de commandes Update (en supposant que cela se passe côté serveur), il suffit d'ajouter les éléments suivants:

Page.RegisterStartupScript("AfterUpdate", "done();"); 

Il provoquera la fonction javascript done() de fonctionner dès que les fenêtres rafraîchit du postback causée par la commande de mise à jour. Si la fonction done ne figure pas déjà dans la page, veillez à ajouter sa définition avant de l'appeler RegisterStartupScript.

+0

J'utilise un EntityDataSource lié à un FormView et je n'ai pas de gestionnaire de commande spécifique. Mais, j'ai un gestionnaire "OnUpdated". J'ai essayé de l'ajouter à ce gestionnaire et j'ai essayé d'ajouter un gestionnaire pour l'événement de clic sur le bouton de sauvegarde et de le mettre là. La fonction "done" est dans la page maître. J'ai également essayé de mettre le code javascript dans le RegisterStartupScript au lieu d'appeler "done". Peut-être juste une differnece dans les versions .Net, mais le code que j'utilise est: ClientScript.RegisterStartupScript (GetType(), "Javascript", "javascript: done();", true); – Shayne

+0

Après avoir creusé un peu plus, je l'ai résolu. Le problème était lié au fait que FormView se trouvait dans un panneau de mise à jour. Je devais utiliser ce qui suit: ScriptManager.RegisterClientScriptBlock (this.UpdatePanel1, typeof (chaîne), "done", "done();", true); – Shayne

+0

@Shayne Si cette réponse vous a aidé à ne pas oublier de définir la réponse acceptée, les autres ne tenteront pas d'y répondre également. Vous obtenez également 2 points de rep pour définir la réponse acceptée :) – Kelsey