У меня проблема с пейджером, который я создаю. Мой код следующий
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> >>