Como utilizar Server.Transfer dentro do UpdatePanel?

Salve desenvolvedores,

Ao tentarmos fazer um Server.Transfer ao clicar em um botão que está dentro do UpdatePanel do ASP.NET AJAX 1.0, recebemos o seguinte erro:

Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed.

Isso ocorre porque o UpdatePanel envia postback assíncrono por padrão. O Server.Trasnfer redireciona a página processando para outra no servidor e a página que recebeu a transferência não conhece o UpdatePanel e recebe todo o conteúdo. Assim, o Update Panel não espera uma página completa de retorno, espera apenas o dado solicitado. Ocorrendo o erro de Parse no ASP.NET AJAX.

Para resolver o problema, basta no evento Init da página adicionando o seguinte código:

ScriptManager1.RegisterPostBackControl(Button1);

onde Button1 é o botão que faz o Server.Transfer e vai executar de forma síncrona normalmente. Caso o botão esteja em um Template de um GridView, basta no evento RowCreated, verificarmos se a linha é DataControlRowType.DataRow, recuperarmos o botão e registrar no ScriptManager1 com o método RegisterPostBackControl.

Enviar por e-mail. Hits para esta publicação: 926.

1 Comentário »

  1. BrunoKenj disse,

    8 de Fevereiro de 2007 @ 18:26

    Alguém conseguiu utilizando ButtonField do Gridview? O bom dele é que o CommandArgument é o index da linha, recuperando fácil o DataKey.

    A alternativa foi (RowCreate):

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
    Button btnVinculado = ((Button)e.Row.Cells[5].Controls[1]); // Botão Vinculado
    Button btnSeguro = ((Button)e.Row.Cells[4].Controls[1]); // Botão Seguro

    btnVinculado.CommandArgument = e.Row.RowIndex.ToString();
    btnSeguro.CommandArgument = e.Row.RowIndex.ToString();

    ScriptManager1.RegisterPostBackControl(btnVinculado); // Botão Vinculado
    ScriptManager1.RegisterPostBackControl(btnSeguro); // Botão Vinculado
    }

RSS para comentários nesta publicação · URI para link desta publicação:

Deixe um Comentário