Pergunta

Tenho uma aplicação ASP.NET 1.1 e estou tentando descobrir por que quando altero um ComboBox cujo valor é usado para preencher outro (relação pai-filho), são produzidos dois postbacks.

Verifiquei e verifiquei o código e não consigo encontrar a causa.

Aqui estão as duas pilhas de chamadas que terminam em page_load

Primeiro postback (gerado pelo autopostback do ComboBox)

Pilha de chamadas de postback http://www.juanformoso.com.ar/images/callstack1.jpg

Segunda postagem (é isso que quero descobrir por que isso está acontecendo)

texto alternativo http://www.juanformoso.com.ar/images/callstack2.jpg

Alguma sugestão?O que posso verificar?

Foi útil?

Solução

É um problema bem específico desse código, duvido que seja útil para mais alguém, mas aqui vai:

Um cheque foi adicionado ao combo onchange com um if, se a condição fosse atendida, era feita uma chamada explícita para a função de postback.Se o combo foi definido como AutoPostback, o asp.net adicionou a chamada de postback novamente, produzindo os dois postbacks...

O html gerado ficou assim:

[select onchange="javascript: if (CustomFunction()){__doPostBack('name','')}; __doPostBack('name','')"]

Outras dicas

A primeira coisa que eu procuraria é que você não tenha a propriedade AutoPostBack do segundo ComboBox definida como verdadeira.Se você alterar o valor no segundo combo com essa propriedade definida como true, acredito que irá gerar um postback nesse controle.

Você tem algum código que possa compartilhar?As postagens duplas me atormentaram tanto no ASP clássico naquela época que foi o que finalmente me levou a mudar para o .NET de uma vez por todas.Sempre que tenho problemas como esses no .NET, vou para cada elemento CONTROL e cada elemento PAGE como load, init, prerender, click, SelectedIndexChanged e similares e coloco um ponto de interrupção.

Mesmo que eu não tenha código lá, inserirei algo como:

Dim i As Integer
i = 0

Geralmente consigo identificar alguma ação que não esperava e corrigir conforme necessário.Eu sugiro que você faça isso aqui.

Boa sorte.

Verifique Request.Form["__EVENTTARGET"] para encontrar o controle que inicia o postback - isso pode ajudá-lo a restringi-lo.

Olhando para as pilhas de chamadas e alguns Reflectoring (no ASP.NET 2 - não tenho 1.1 em mãos) - parece que SessionStateModule.PollLockedSessionCallback faz parte das rotinas de inicialização do HttpApplication.Pode ser possível que seu aplicativo esteja sendo reciclado - tenho certeza de que um evento será gravado no log de eventos para isso.

Minha única outra sugestão seria o Fiddler ou algo no cliente para capturar o tráfego HTTP.

Este é um post muito antigo, mas as pessoas ainda procuram uma solução exatamente como eu fiz na semana passada.

Como Grengby disse, os eventos duplos são os principais motivos - mas remover um deles nem sempre é uma opção.Pelo menos no meu caso e tive que resolver isso no aplicativo de terceiros.

Adicionei o seguinte script e alterei o formulário ASP na masterpage:

<script>var Q = 0;</script>
<form id="Form1" runat="server" onsubmit="Q++; if(Q==1){return true;} else { return false;}">

Isso parece estar funcionando e encaminhe seus comentários.

Uma corrida

http://www.velocityreviews.com/forums/t117900-asp-net-multiple-postback-issue.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top