2013-07-30 2 views
0

Mon projet est essentiellement une page Web avec un menu et un panneau de mise à jour. L'utilisateur sélectionne un choix dans le menu et un contrôle utilisateur est chargé dans le panneau de mise à jour. Je préférerais ne pas utiliser un panneau de mise à jour, mais il existe plusieurs contrôles de base de données qui contiennent des informations qui vont ensuite modifier le contenu d'un autre contrôle de base de données. Quoi qu'il en soit, mon projet appelle à une boîte de message apparaît à l'écran, que je n'ai pas de problème à se rendre au travail:ScriptManager.RegisterStartupScript Cliquez sur le bouton (dans le panneau de mise à jour) Ne se déclenche pas le premier clic

string s= "<script>alert('HayGuise');</script>"; 
ScriptManager.RegisterClientScriptBlock(c.Page, c.Page.GetType(), GUID.NewGUID().ToString(),s,false); 

Maintenant, j'ai essayé plusieurs tactiques différentes, y compris le remplacement GUID avec un statique chaîne; J'ai utilisé RegisterStartupScript, etc Mon problème est que la boîte de message ne s'affiche pas sur le premier clic du bouton d'appel APRÈS que le panneau de mise à jour a été mis à jour pour afficher un nouveau contrôle utilisateur. Mais, si je clique à nouveau sur le bouton, tout va bien. Si cela est fait sur le tout premier formulaire chargé dans le panneau de mise à jour (ouverture du site et sélection dans le menu), tout fonctionne bien; ce n'est que lorsque le panneau de mise à jour se met à jour avec un nouveau formulaire, que cela se produira, et encore une fois, seulement au premier clic.

De plus, le code est déclenché et tout le code qui suit le code de ScriptManager se déclenche, mais la boîte de message n'apparaît pas tant que le bouton n'est pas cliqué à nouveau. Comme je suis en train de tester ce comportement pour le moment, j'ai ajouté le code popup à chacun des boutons du formulaire, et le comportement est le même pour chacun d'entre eux. Il est si long de mettre en œuvre un morceau de code fiable (pour la boîte aux lettres) que d'avoir ce léger problème, et c'est après que j'ai compris pourquoi mes événements de bouton tiraient deux fois sur un seul clic. Je suis à peu près sûr que ça va être quelque chose de simple, une sorte de propriété que je ne connais pas et qui doit être réglée correctement. Merde, j'adorerais juste pouvoir régler tous ces petits problèmes afin que je puisse continuer avec le reste du projet. Sooooo fermer. Merci pour toute aide. Edit: En outre, les boutons sont situés dans un autre usercontrol qui est ajouté au formulaire usercontrol qui est affiché dans le panneau de mise à jour.

Éditer II: Merci de votre participation, je m'excuse d'y revenir si tard, je suis passé à d'autres parties du projet et je suis revenu à cela. Le problème n'est pas la méthode startupscript, ni la méthode clientscriptblck; le problème réside dans la perte de valeur/viewstate/clientid sur la publication.

Au moment où j'ai posté cette question, ce projet était une application d'une seule page. J'ai testé la fonctionnalité en créant une application multipage, et j'ai continué à partir de là, promettant de revenir sur ce problème. Eh bien, je suis de retour et le problème ne réside pas dans le panneau de mise à jour, il a quelque chose à voir avec mon code, car j'efface le panneau de mise à jour (essayé avec un panneau régulier) et recharge le nouveau usercontrol. Une fois effacé, quelque chose se détraque, et rien ne se déclenche lors de la première publication. C'est un problème étrange, que j'ai encore à trouver beaucoup (quelques articles) des informations sur ce qui est spécifique à la première publication causant ce problème. Je mettrai à jour avec une réponse si j'en trouve un; la seule correction que j'ai trouvée est d'ajouter une ligne au code de sélection de menu, Server.Transfer (thecurrentpage), actualisant essentiellement la page. Cela résout tous les problèmes, mais il semble un peu de mauvais goût. Encore merci pour votre contribution.

+0

Tous les navigateurs ont le même problème?Exactement, lorsque vous appelez ScriptManager.RegisterClientScriptBlock (..)? –

+0

Testé sur IE8 et Firefox, même problème. Son appelé sur un bouton clic, son dans DisplayMessage (contrôle c, message de chaîne) et son seulement les deux lignes de code ci-dessus (au lieu de 'HayGuise' ce serait "+ message +") .. – fafafooey

+0

si vous mettez un point d'arrêt sur premier bracet de cette méthode, il se déclenche à la première fois? Sinon, je pense que votre problème est ailleurs sur la page, le code que vous avez entré est correct (je l'utilise aussi). Dans tous les cas, peut poster un peu plus de code? Par exemple: la méthode complète, la balise d'ouverture du panneau de mise à jour, etc. –

Répondre

0

Si vous utilisez AJAX UpdatePanel, le code suivant devrait fonctionner pour vous. Dans mon cas, j'utilisais le panneau de mise à jour et aucun des sur fonctionné excepté celui-ci.

ScriptManager.RegisterStartupScript(myUpdatePanelID, myUpdatePanelID.GetType(), "myFunction", "myFunction();", true); 
0

Si vous utilisez le panneau de mise à jour dans votre page, le code suivant devrait fonctionner pour vous. Vous devez utiliser RegisterStartupScript dans toute la page en utilisant "this". ScriptManager.RegisterStartupScript(this, this.GetType(), "myFunction", "myFunction();", true);

Questions connexes