Элементы управления экстендером не могут быть зарегистрированы после PreRender.Происходит на GridView DataBind () - PullRequest
1 голос
/ 22 марта 2011

В нашем веб-приложении ASP.Net 4.0 C # я получаю сообщение об ошибке выше в строке темы во время отладки.

На самом деле я не делаю ничего лишнего с динамическими элементами управления на странице, так как некоторые из указанных результатов поиска могли быть источником проблемы.

Страница имеет размер 2 ajax:CalendarExtenders и некоторое время нормально работала.

Хотя это, вероятно, связано, я вижу, как на самом деле, но это то, над чем я сейчас работал, когда появилась ошибка.

У нас есть элемент управления на странице, который вызывает событие для функции автообновления. [Это контроль карты].

Моя страница подписывается на это событие, и после этого DataBinding asp:GridView. Нам необходимо каждый раз связывать данные в сетке, чтобы обеспечить синхронизацию сетки и элемента управления картой. [Это страница отслеживания транспортных средств]

Ошибка возникает в команде DataBind.

Я удалил расширители только для того, чтобы выдать ту же ошибку.

Привязка данных проста, но я уверен, что ошибка находится в другом месте. Я все равно включу это.

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

Может быть, это просто не понимание жизненного цикла страницы, которое сбило меня с толку, в любом случае, я был бы рад некоторой помощи.

Ответы [ 2 ]

1 голос
/ 18 сентября 2011

Используйте следующий код в вашем пользовательском контроле или управлении страницей. Это будет работать, если вы используете какой-либо элемент управления ajax.

protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        if (this.DesignMode == true)
        {
            this.EnsureChildControls();
        }
        this.Page.RegisterRequiresControlState(this);
    } 
0 голосов
/ 26 марта 2011

Проблема заключалась в том, что при привязке данных строки в каждый ряд добавлялись элементы управления расширителями, и именно эти расширители вызывали проблему.

Событие, которое вызвало повторное связывание, произошло от пользовательского элемента управления, который использовал обратные вызовы для связи с сервером и последующего вызова события, которое, вероятно, слишком поздно произошло в жизненном цикле страницы.

Не понимая, что происходит, все немного пахло, и я немного изменил структуру приложения.

...