ASP.NET Control Render Pipeline - PullRequest
       23

ASP.NET Control Render Pipeline

0 голосов
/ 23 июня 2009

У меня проблема с пейджером, который я создаю. Мой код следующий

protected override void CreateChildControls()
{
  base.CreateChildControls();

  pnl = new Panel { ID = "NewsPager", CssClass = "NewsPager" };
  Controls.Add(ddl);

  AddPagerControls();
}

AddPagerControls добавляет группу LinkButton, которые используют один и тот же обработчик событий:

private void li_Click(object sender, EventArgs e)
{
  selectedValue = ((LinkButton) sender).CommandArgument;
  AddPagerControls();
}

Что происходит сейчас, так это то, что когда я добавляю LinkButton «Next», он получает правильный CommandArgument, используя:

var liNext = new LinkButton {ID = "NewsPagerLinkNext", Text = ">", CommandArgument = (int.Parse(value) + 1).ToString()};
liNext.Click += new EventHandler(li_Click);
pnl.Controls.Add(liNext);

т.е. если текущая страница равна 2, то CommandArgument кнопки «Далее» будет 3 при отладке кода. Однако, когда страница визуализируется, и я нажимаю следующую кнопку, она будет работать один раз (переходя со страницы 1 на 2), но тогда она всегда будет равна 2, даже если в коде она установлена ​​на 3. Поэтому что-то должно произойти, когда элемент управления отображается.

Я немного растерялся. Я попытался изменить вызов AddPagerControls в CreateChildControls на if (! Page.IsPostBack) {AddPagerControls ();}, но тогда обработчик событий вообще не сработает.

Редактировать: P.S. Я делаю pnl.Controls.Clear (), когда метод AddPagerControls вызывается из обработчика событий, в противном случае LinkButtons будут добавлены дважды.

Редактировать: P.P.S. Я пересматриваю, какие кнопки ссылок добавлять каждый раз, потому что мне нужно показывать только 5 ссылок, если существует больше страниц, т.е.

<< <2 3 4 5 6 7> >>

1 Ответ

0 голосов
/ 23 июня 2009

Чего я не понимаю, так это того, почему вы постоянно обновляете свой пейджинговый контроль. Не могли бы вы просто использовать подход, при котором у вас есть кнопки ссылки «prev» и «next», и вы поддерживаете в состоянии просмотра вашего элемента управления (как отдельные свойства) текущую просматриваемую страницу и количество элементов (т.е. размер страницы)?

В обработчике событий вы затем делаете правильные действия, поскольку знаете, что ваша текущая страница будет выглядеть как currentPageIndex+1 или что-то подобное. Постоянная регенерация кнопок prev / next, особенно в обработчике l i_Click, с моей точки зрения, не очень хороший подход, и это также может вызвать ваши проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...