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.

Leave a Reply