Existe un caso especial en el que deseamos actualizar un valor, por ejemplo un contador de filas de un GridView, el cual está dentro de un UpdatePanel. Para actualizar el valor, se decide registrar una variable dinámica la cual se asocia al objeto window.document, quedando en la página del cliente de la siguiente forma:
<script type="text/javascript">//<![CDATA[
document.TotalRows='5';//]]>
</script>
Para registrar una variable al objeto document de Javascript desde el Code-Behind con C#, se hace de la siguiente forma:
if (!ClientScript.IsClientScriptBlockRegistered("total"))
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "total",
"document.TotalDeFilas ='" + gridView.Rows.Count + "';", true);
En el caso que estaba resolviendo, el código anterior lo coloqué en el evento Page_Load() de una página *.aspx.
Ahora bien, cada vez que un usuario agregue un registro nuevo o elimine un registro, el valor debe cambiar en la página. Si utilizamos la siguiente línea de código, nos daremos cuenta que no va a funcionar, aunque la línea de código éste buena:
ClientScript.RegisterClientScriptBlock(this.GetType(), "total", "document.TotalDeFilas ='" + gridView.Rows.Count.ToString() + "';", true);
¿Por qué no se actualiza el valor en la página después de por ejemplo eliminar un registro?
Muy simple (aunque me tomo como tres horas darme cuenta, jaja!), eso ocurre porque el GridView está dentro del UpdatePanel. Entonces para solucionarlo; es decir, para actualizar el valor, hay que usar el objeto ScriptManager en lugar del objeto ClientScriptManager. La línea de código sería entonces:
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "total", "document.TotalDeFilas ='" + GridView.Rows.Count + "';", true);
Lo que vale la pena tener en mente es que si uno desea actualizar valores de objetos que están dentro de un UpdatePanel usando javascript, lo mejor es usar ScriptManager en el CodeBehind.
No hay comentarios:
Publicar un comentario