viernes, 20 de septiembre de 2013

ASP.NET ERROR en ValidatorCalloutExtender. "El control extensor 'xxx' no es un control extensor registrado."


 PROBLEMA 

Durante la ejecución surge el error siguiente:
El control extensor 'vce1_ValidatorCalloutExtender' no es un control extensor registrado. Los controles extensores deben registrarse mediante RegisterExtenderControl() antes de llamar a RegisterScriptDescriptors(). Nombre del parámetro: extenderControl

siendo vc1_ValidatorCalloutExtender el nombre de nuestro ValidatorCalloutExtender .

El problema aparece al usar un ValidatorCalloutExtender dentro de una sección div (o similar) que tenga el atributo visible="false".
 

 SOLUCIÓN 

Este bug puede ser evitable si dejamos el atributo visible de la sección div a true (su valor por defecto), e introducimos la acción de ocultar la sección div en el code behind, por ejemplo en el evento de página PreRenderComplete. Para ello habrá que introducir en la etiqueta div los atributos runat=server y id=div1 para que sea accedible desde el code behind.

Código en C#:
<div ID="div1" runat="server">


----

protected void Page_PreRenderComplete(Object sender, EventArgs e)
{
div1.visible= false;
}