ASP.Net UpdatePanel ImageButton faz com que “this._postbackSettings.async seja nulo ou não seja um objeto”
-
09-06-2019 - |
Pergunta
Recebo este erro em um painel de atualização dentro de um popupControlExtender que está dentro de um dragPanelExtender.
Vejo que muitas outras pessoas têm esse problema e têm várias soluções, nenhuma das quais funcionou para mim.
Eu adoraria ouvir uma explicação lógica sobre por que isso está ocorrendo e uma maneira infalível de evitar tais problemas no futuro.
Descobri que, como outros afirmam, esse erro não ocorre quando o gatilho é um LinkButton em vez de um ImageButton, ainda me perguntando se alguém tem uma explicação.
Solução
Meu melhor palpite é que o UpdatePanel não é capaz de gravar corretamente a propriedade "async" personalizada na solicitação de postback.Provavelmente, isso se deve ao bloqueio de um dos controles que o envolvem (meu pressentimento é que é o popupControlExtender - ele tende a ter um comportamento estranho com painéis de atualização, pois se destina a gerenciar os eventos dentro dele para fins de mostrar/ocultar).
Eu recomendaria remover o painel de atualização e lançar sua própria solução para sua necessidade comercial específica de tê-lo lá ou implementar seu próprio script pop-up (provavelmente um pouco mais fácil de escrever).
Aliás, para alguns antecedentes, "this._postbackSettings.async" é a sua estrutura AJAX.NET tentando descobrir se esta é uma chamada assíncrona ou não.Você pode superá-lo definindo isso programaticamente antes que o postback seja enviado (capture o evento de postback e adicione o campo à solicitação de postback, se ainda não estiver lá).
Apenas algumas reflexões... Não acredito que exista uma resposta "plug and play" para esta!
Outras dicas
Eu tive o mesmo problema e não encontrei nenhuma solução satisfatória até que acabei http://siderite.blogspot.com/2009/02/thispostbacksettingsasync-is-null-or.html que faz exatamente o que eu quero.
Apenas para evitar problemas com possíveis links mortos no futuro, aqui está o código:
var script = @"
if (Sys &&
Sys.WebForms && Sys.WebForms.PageRequestManager &&
Sys.WebForms.PageRequestManager.getInstance)
{
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (prm &&
!prm._postBackSettings)
{
prm._postBackSettings = prm._createPostBackSettings(false, null, null);
}";
ScriptManager.RegisterOnSubmitStatement(
Page,
Page.GetType(),
"FixPopupFormSubmit",
script);
No caso de um envio sem que _postBackSettings esteja definido, ele os cria, fazendo com que a exceção de referência nula desapareça, pois _postBackSettings.async fica disponível.
Espero que isto ajude,
G.
Definir "EnablePartialRendering" como falso no controle ScriptManager evita o erro, mas não é uma solução ideal.Perder o benefício da renderização parcial pode ser um grande problema, dependendo da sua aplicação.
Só para constar, eu não estava fazendo exatamente o mesmo que outras pessoas que viram o erro.Eu tenho um PopupControlExtender, no qual há uma checkboxlist.Adicionei um link "selecionar tudo" com um método javascript para selecionar/desmarcar tudo programaticamente.Não estou usando um botão de imagem.Não vi o erro antes de adicionar o javascript e agora mesmo depois de removê-lo o erro permanece.Deve haver outra mudança que estou perdendo.
Espero que isso ajude alguém...
--Matt