Um UpdatePanel substitui completamente o conteúdo do painel de atualização em uma atualização. Isso significa que os eventos nos quais você se inscreveu não são mais inscritos porque há novos elementos nesse painel de atualização.
O que eu fiz para contornar isso é reinscrever os eventos necessários após cada atualização. Utilizo $(document).ready()
o carregamento inicial e depois o da Microsoft PageRequestManager
(disponível se você tiver um painel de atualização em sua página) para assinar novamente todas as atualizações.
$(document).ready(function() {
// bind your jQuery events here initially
});
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function() {
// re-bind your jQuery events here
});
O PageRequestManager
é um objeto javascript que está disponível automaticamente se um painel de atualização estiver na página. Você não precisa fazer nada além do código acima para usá-lo enquanto o UpdatePanel estiver na página.
Se você precisar de um controle mais detalhado, esse evento passará argumentos semelhantes à maneira como os eventos do .NET são passados, (sender, eventArgs)
para que você possa ver o que gerou o evento e somente reativar, se necessário.
Aqui está a versão mais recente da documentação da Microsoft: msdn.microsoft.com/.../bb383810.aspx
Uma opção melhor que você pode ter, dependendo de suas necessidades, é usar o jQuery .on()
. Esse método é mais eficiente do que se inscrever novamente nos elementos DOM a cada atualização. Leia toda a documentação antes de usar essa abordagem, pois ela pode ou não atender às suas necessidades. Existem muitos plugins jQuery que não seriam razoáveis para refatorar o uso .delegate()
ou .on()
, portanto, nesses casos, é melhor você se inscrever novamente.