Domanda

Sto sviluppando un'applicazione .NET ASP con il codice VB dietro. Ho 2 caselle di testo e 1 pulsante. Il pulsante quando si fa clic, utilizza JavaScript per aprire una nuova finestra (chiamiamo la nuova finestra X).

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

La funzione ShowWindowx () apre una nuova finestra con un URL che passa in entrambi i parametri dalla casella di testo. Quando inserisco nuovi valori nelle caselle di testo e clicca via dalle caselle di testo (ma non sul pulsante), la pagina fa un postback perché l'ho impostato su ogni volta che la casella di testo perde la messa a fuoco, per eseguire un postback che posterà i nuovi valori al server.

Il problema è che se modifico uno qualsiasi dei valori della casella di testo come la modifica da 3 a 4 e fare immediatamente fare clic sul pulsante, senza fare clic sulla casella di testo, quindi i nuovi valori non vengono raccolti, quindi ho ancora finito 3. Ho provato Per forzare un postback quando il pulsante fa clic su quanto segue:

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

E anche se questo provoca un postback, il postback non viene completato finché non chiudo la finestra che si apre a causa della funzione ShowWindowsXX.

Qualcuno può avvistare su un modo per forzare il postback per completare completamente prima della funzione ShowWindowx () esegui in modo che i nuovi valori possano essere portati attraverso?

Grazie in anticipo

È stato utile?

Soluzione

Devi cambiare completamente il tuo approccio, per quanto non è una chiamata Ajax, eliminerebbe tutto sulla pagina, e la pagina verrà aggiornata.

Quindi cosa può essere fatto per ottenere questo?Puoi controllarlo sul backend e aggiungere lo script se la pagina viene caricata in una chiamata postback, come questa:

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

certo che può essere fatto se hai già registrato lo script che il ShowWindowX è definito in esso.

Ma se non si desidera mostrare la finestra ogni volta che si verifica un post posteriore, è possibile impostare un flag in una memoria globale come localstorage, quindi controllalo quando si desidera aprire la finestra:

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

E nel carico del lato del lato server, fai questo:

if (IsPostBack)
   Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowWindowX", 
   "if(Boolean(localStorage.callwin)){ShowWindowX();localStorage.callwin='';}",
   true);
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top