Poner el foco en un TextBox que están dentro de un UpdatePanel cuando se produce un postback asíncrono

Hoy estaba realizando unas modificaciones en una aplicación y entre ellas estaba el modificar un control de usuario, poner el foco en un textbox de un edittemplate de un gridview que recoge anotaciones de los usuarios. La cosa es que el gridview está dentro de un UpdatePanel y si optamos por esta solución, nos encontraremos que no funciona:

TextBox textAnotacion = (TextBox)e.Row.FindControl("textAnotacion");
textAnotacion.Focus();

Creo debe ser porque como es un postback asíncrono, sino lo gestionamos a través del ScriptManager que es el encargado de renderizar el contenido del UpdatePanel, no actualiza el foco del TextBox en el caso de usar el método Focus() del control, que sí funciona en el caso de no utilizar UpdatePanel(postback síncrono).

Para que nos funcione correctamente, debemos usar el método SetFocus() del ScriptManager y en mi caso como el ScriptManager está en la MasterPage tengo que utilizar el método GetCurrent(Page) para obtener una instancia del mismo:

TextBox textAnotacion = (TextBox)e.Row.FindControl("textAnotacion");
ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.SetFocus(textAnotacion);

 

Salu2