Los controles de extensor no pueden estar registrados después de Prerender. Ocurre en GridView databind ()

StackOverflow https://stackoverflow.com/questions/5397165

Pregunta

En nuestra aplicación ASP.NET 4.0 C# web obtengo el error anterior en la línea de asunto durante la depuración.

Realmente no estoy haciendo nada funky con controles dinámicos en la página, ya que algunos resultados de búsqueda indicados podrían haber sido la fuente del problema.

La página tiene 2 ajax:CalendarExtenders y ha estado funcionando bien por un tiempo.

Aunque probablemente esté relacionado, puedo ver cómo realmente, pero esto es en lo que estaba trabajando actualmente cuando surgió el error.

Tenemos un control en la página que plantea un evento en una función Autorefresh. [Es un control de mapa].

Mi página se suscribe a ese evento y al hacerlo databinds y asp:GridView. Necesitamos unir los datos en la cuadrícula cada vez para garantizar que la cuadrícula y el control del mapa estén sincronizados. [Es una página de seguimiento de vehículos

El error ocurre en el comando de datos.

He eliminado a los extensores solo para encontrar el mismo error.

El Databind es sencillo, pero estoy seguro de que el error reside en otro lugar. Lo incluiré de todos modos.

this.SearchGrid.DataSource = resultsWithMetrics;

        this.SearchGrid.AllowPaging = true;
        this.SearchGrid.PageIndex = this.SearchGridPager.CurrentPage;
        this.SearchGrid.AllowPaging = this.SearchGridPager.PageSize > 0;
        this.SearchGrid.PageSize = this.SearchGridPager.PageSize > 0 ? this.SearchGridPager.PageSize : this.SearchGrid.PageSize;

        this.SearchGrid.DataBind();

Tal vez simplemente no entienda el ciclo de vida de la página que me ha tropezado, de todos modos se alegraría de alguna ayuda.

¿Fue útil?

Solución

Use el siguiente código en su control de UserControl o de página. Funcionará si está utilizando algún control AJAX.

protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        if (this.DesignMode == true)
        {
            this.EnsureChildControls();
        }
        this.Page.RegisterRequiresControlState(this);
    } 

Otros consejos

El problema era que en la fila de datos de la fila se agregaron los controles de extensor a cada fila y fueron estos extensores los que causaron el problema.

El evento que desencadenó el Rebind provino de un control de usuario que usó devoluciones de llamada para comunicarse con el servidor y, posteriormente, planteó el evento que probablemente llegó demasiado tarde de todos modos en el ciclo de vida de la página.

Sin comprender completamente lo que estaba sucediendo, todo olía un poco dudoso y he cambiado un poco la estructura de la aplicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top