Question

Je développe une application .NET ASP avec du code VB derrière.J'ai 2 zones de texte et 1 bouton.Le bouton, lorsque vous cliquez dessus, utilise javascript pour ouvrir une nouvelle fenêtre (appelons la nouvelle fenêtre x).

 button.OnClientClick = "ShowWindowX();return false;"

La fonction ShowWindowX() ouvre une nouvelle fenêtre avec une URL qui transmet les deux paramètres de la zone de texte.Lorsque j'insère de nouvelles valeurs dans les zones de texte et que je clique en dehors des zones de texte (mais pas sur le bouton), la page effectue une publication car je l'ai définie à chaque fois que les zones de texte perdent le focus, pour effectuer une publication qui publiera les nouvelles valeurs. au serveur.

Le problème est que si je modifie l'une des valeurs de la zone de texte, par exemple en changeant 3 en 4 et que je clique immédiatement sur le bouton, sans cliquer d'abord sur la zone de texte, les nouvelles valeurs ne sont pas récupérées, donc j'obtiens toujours 3.J'ai essayé de forcer une publication lorsque le bouton est cliqué sur ce qui suit :

 btnBBHistory.OnClientClick = "__doPostBack();ShowWindowX();return false;"

et bien que cela provoque une publication, la publication ne se termine que lorsque je ferme la fenêtre qui s'ouvre grâce à la fonction ShowWindowsX.

Quelqu'un peut-il nous conseiller sur un moyen de forcer la publication à se terminer complètement avant que la fonction ShowWindowX() ne s'exécute afin que les nouvelles valeurs puissent être transmises ?

Merci d'avance

Était-ce utile?

La solution

Vous devez changer complètement votre approche, dans la mesure où il ne s'agit pas d'un appel ajax, cela effacerait tout sur la page et la page serait actualisée.

Alors, que peut-on faire pour y parvenir ?vous pouvez l'enregistrer sur le backend et ajouter le script si la page est en cours de chargement lors d'un appel de publication, comme ceci :

if (IsPostBack)
    Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowWindowX", 
    "ShowWindowX();", true);

Bien sûr, cela peut être fait si vous avez déjà enregistré le script que le ShowWindowX y est défini.

Mais si vous ne voulez pas que la fenêtre s'affiche à CHAQUE fois qu'une publication se produit, vous pouvez définir un indicateur dans un stockage global comme localStorage, puis le vérifier lorsque vous souhaitez ouvrir la fenêtre :

btnBBHistory.OnClientClick = "__doPostBack();localStorage.callwin=true;return false;"

et dans le chargement de la page côté serveur, faites ceci :

if (IsPostBack)
   Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowWindowX", 
   "if(Boolean(localStorage.callwin)){ShowWindowX();localStorage.callwin='';}",
   true);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top