Могу ли я явно заставить asp.NET повторно загрузить данные ViewState любого элемента управления данными? - PullRequest
1 голос
/ 30 июня 2010

У меня проблема с иерархией asp.net lifecylce.

По сути, у меня есть один пользовательский элемент управления, в котором есть GridView.И этот GridView генерируется динамически на основе открытого свойства элемента управления (названного параметром в упрощенном коде ниже).

Все нормально, когда я вставляю этот элемент управления на страницу aspx, устанавливаю его свойство Parameter и вызываю DataBind(Параметр) на нем.GridView генерируется и заполняется в пользовательском интерфейсе.

Проблема возникает, когда я отправляю обратно страницу.Я должен восстановить структуру GridView, чтобы данные в ViewState элемента управления могли использоваться для заполнения GridView.Так что я могу добиться его содержания.Но пока структура GridView генерируется динамически и основана на установленном для нее свойстве Parameter, это невозможно.Потому что OnInit пользовательского элемента управления вызывается перед OnInit страницы, и поэтому свойство Parameter устанавливается после генерации структуры GridView.В результате я получаю пустое Gridview в конце.

Вот код в упрощенном виде.

Можете ли вы дать мне несколько рекомендаций, как это преодолеть?

Могу ли я явно заставить asp.NET повторно загрузить ViewState вида сетки?

Page HomePage.aspx имеет обработчик событий OnInit таким образом, гдеэто устанавливает свойство пользовательского элемента управления ctlMyUSerControl

protected override void OnInit(EventArgs e)
    {

              ctlMyUserControl.Parameter = new Parameter()
                       name="Orhan",
                       surname= "Pamuk"};

        }

И в ctlMyUserControl OnInit у меня есть

    protected override void OnInit(EventArgs e)
{
        if (Page.IsPostBack && Parameter !=null && SomeGridViewRowsExistOnUI)
        {
                        // Generate dynamic columns based on Parameter property
                        // So that gridview can be populated 
                       // with the post-backed data which 
                        // should contain the ViewState of the gridview 
                       GenerateGridViewColumns(Parameter);
        }

    base.OnInit(e);
}

1 Ответ

1 голос
/ 30 июня 2010

Я продал это, ребята.

Я регенерировал мои столбцы GridView на странице контейнера пользовательского элемента управления.

Итак, в OnInit страницы я регенерирую свои столбцы, и это все еще до вызова метода LoadViewState ().

protected override void OnInit(EventArgs e)
    {

              Parameter parameter = new Parameter()
                       name="Orhan",
                       surname= "Pamuk"};

               ctlMyUserControl.GenerateGridViewColumns(parameter);


        }
...