Pergunta

Estou desenvolvendo uma .NET aplicação ASP com o código VB para trás.Eu tenho 2 caixas de texto e 1 botão.O botão quando clicado, usa javascript para abrir uma nova janela (vamos chamar de a nova janela x).

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

O ShowWindowX função() abre uma nova janela com uma URL que passa em ambos os parâmetros da caixa de texto.Quando eu inserir novos valores nas caixas de texto e clique de distância a partir de caixas de texto (mas não sobre o botão), a página faz um postback porque coloquei-a sempre que as caixas de texto perde o foco, para fazer uma nova postagem, que irá lançar os novos valores de volta para o servidor.

O problema é que se eu editar qualquer um dos valores de caixa de texto como a alteração de 3 a 4 e clique imediatamente no botão, sem clicar fora da caixa de texto primeiro, em seguida, os novos valores não são apanhados, então eu ainda tenho 3.Eu tentei forçar um postback quando o botão é clicar com o seguinte:

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

e, embora isso não causa um postback, a reposição não for concluída até eu fechar a janela que se abre, devido à ShowWindowsX função.

Alguém pode aconselhar sobre uma forma para forçar o postback totalmente concluída antes do ShowWindowX() função executa, de modo a que os novos valores podem ser trazidas através de?

Obrigado antecipadamente

Foi útil?

Solução

Você tem que mudar sua abordagem completamente, tanto quanto não é uma chamada ajax, ele iria acabar com tudo na página, e a página vai ficar atualizado.

Então, o que pode ser feito para conseguir isso?você pode verificá-lo em no back-end e adicionar o script se a página está sendo carregada em um postback chamada, como este:

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

É claro que isso pode ser feito se você já está registrado, o script que o ShowWindowX é nele definidas.

Mas se você não quer mostrar a janela TODA vez que ocorre uma postagem de volta, você pode definir um sinalizador em um armazenamento global como o localStorage, em seguida, verifique-lo quando você quiser abrir a janela:

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

e no lado do servidor, página de carga de fazer isso:

if (IsPostBack)
   Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowWindowX", 
   "if(Boolean(localStorage.callwin)){ShowWindowX();localStorage.callwin='';}",
   true);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top