Pregunta

Estoy desarrollando una .NET ASP aplicación con el código de VB detrás.Tengo 2 cuadros de texto y 1 botón.El botón cuando se hace clic, utiliza javascript para abrir una ventana nueva (vamos a llamar a la nueva ventana de x).

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

El ShowWindowX() la función se abre una ventana nueva con una dirección URL que pasa en ambos parámetros en el cuadro de texto.Al insertar nuevos valores en los cuadros de texto y haga clic fuera de los cuadros de texto (pero no en el botón), la página se hace una devolución de datos debido a que cada vez los cuadros de texto perder el foco, para hacer una devolución de datos que se va a publicar a los nuevos valores de vuelta al servidor.

El problema es que si puedo editar cualquiera de los textbox valores tales como el cambio de 3 a 4 y de inmediato haga clic en el botón, sin necesidad de hacer clic fuera del cuadro de texto primero y luego los nuevos valores no son recogidos, así que me dan 3.Traté de forzar una devolución de datos cuando el botón haga clic en los siguientes:

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

y aunque esto causa una devolución de datos, la devolución no se completa hasta que cierre la ventana que se abre, debido a la ShowWindowsX función.

Puede alguien aconsejar una forma de obligar a la devolución de completar totalmente antes de la ShowWindowX() la función se ejecuta de modo que los nuevos valores pueden ser llevados a través de?

Gracias de antemano

¿Fue útil?

Solución

Usted tiene que cambiar su enfoque completamente, por lo que no es una llamada ajax, se eliminaría todo en la página, y la página de refrescarse.

Entonces, ¿qué se puede hacer para lograr esto?se puede comprobar en el backend y agregar el script si la página se carga en una devolución de llamada, como este:

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

Por supuesto se puede hacer si usted ya se registró la secuencia de comandos que el ShowWindowX está definido en la misma.

Pero si usted no desea que se muestre la ventana CADA vez que se produce una devolución, usted puede establecer un indicador global de almacenamiento como localStorage, verificación si desea abrir la ventana:

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

y en el lado del servidor de la página de carga de hacer esto:

if (IsPostBack)
   Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowWindowX", 
   "if(Boolean(localStorage.callwin)){ShowWindowX();localStorage.callwin='';}",
   true);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top