Les contrôles des prolongations ne peuvent pas être enregistrés après Prerender. Se produit sur GridView databind ()

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

Question

Sur notre application Web ASP.NET 4.0 C #, j'obtiens l'erreur ci-dessus dans la ligne d'objet pendant le débogage.

Je ne fais vraiment rien de funky avec des contrôles dynamiques sur la page car certains résultats de recherche indiqués auraient pu être la source du problème.

La page a 2 ajax:CalendarExtenders et fonctionne bien depuis un certain temps.

Bien que ce soit probablement lié, je peux voir à quel point c'est vraiment mais c'est sur quoi je travaillais actuellement lorsque l'erreur est apparue.

Nous avons un contrôle sur la page qui soulève un événement sur une fonctionnalité AutoreFresh. [C'est un contrôle de carte].

Ma page s'abonne à cet événement et après avoir fait databind asp:GridView. Nous devons lier les données de la grille à chaque fois pour garantir que la grille et le contrôle de la carte sont synchronisés. [C'est une page de suivi de véhicule

L'erreur se produit sur la commande databind.

J'ai supprimé les extendeurs pour trouver la même erreur.

La données est simple, mais je suis sûr que l'erreur réside ailleurs. Je vais l'inclure quand même.

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();

Peut-être qu'il ne comprend tout simplement pas le cycle de vie de la page qui m'a déclenché, de toute façon serait heureux de l'aide.

Était-ce utile?

La solution

Utilisez le code suivant dans votre Contrôle UserControl ou Page. Cela fonctionnera si vous utilisez un contrôle AJAX.

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

Autres conseils

Le problème était que sur la Databind de ligne, les contrôles de l'extension ont été ajoutés à chaque ligne et ce sont ces extensibles qui ont causé le problème.

L'événement qui a déclenché le Rebind provenait d'un contrôle utilisateur qui a utilisé des rappels pour communiquer avec le serveur et augmenter par la suite l'événement qui est probablement arrivé trop tard de toute façon dans le cycle de vie de la page.

Sans comprendre pleinement ce qui se passait, tout sentait un peu douteux et j'ai un peu changé la structure de l'application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top