ASP.Net UpdatePanel ImageButton faz com que “this._postbackSettings.async seja nulo ou não seja um objeto”

StackOverflow https://stackoverflow.com/questions/57586

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.

Foi útil?

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

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