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.
Permalink Enviar por e-mail. Hits para esta publicação: 926.
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
}