Хорошо, я понял это. Я просто заставил мой класс реализовать IPostBackEventHandler. Это заставляет ваш элемент управления запускать событие, когда пользователь что-то предпринимает. В моем случае это щелчок по номеру навигационной страницы: [1] [2] [3] [4] [5] [Далее>]
Затем внутри рендера, где я создаю теги Anchor, я добавляю это к каждому href (pageStartRow различна для каждого):
Параметры PostBackOptions = новые PostBackOptions (this, pageStartRow.ToString ());
writer.AddAttribute (HtmlTextWriterAttribute.Href, "javascript:" + Page.ClientScript.GetPostBackEventReference (options));
writer.RenderBeginTag (HtmlTextWriterTag.A);
Ключ должен передать что-то, что однозначно определяет, по какой ссылке они кликнули. Это делается как 2-й параметр конструктора для класса PostBackOptions.
Затем я добавил следующие элементы в свой класс WebControl:
// Определяет событие Click.
открытый делегат void ClickHandler (отправитель объекта, GridPagingNavClickedEventArgs e);
публичное событие ClickHandler Click;
// Вызов делегатов, зарегистрированных с событием Click.
защищенная виртуальная пустота OnClick (GridPagingNavClickedEventArgs e)
{
если (Нажмите! = ноль)
{
Нажмите (это, е);
}
}
public void RaisePostBackEvent (string eventArgument)
{
GridPagingNavClickedEventArgs e = new GridPagingNavClickedEventArgs (Convert.ToInt32 (eventArgument));
OnClick (е);
}
GridPagingNavClickedEventArgs содержит один элемент (pageNumber в моем случае).
Наконец, на моей странице aspx (где я использую веб-управление) я делаю это в Page_OnLoad:
gridNavTop.Click + = new GridPagingNavigation.ClickHandler (gridNavTop_Click);
и это код события:
private void gridNavTop_Click (отправитель объекта, GridPagingNavClickedEventArgs e)
{
StartRow = e.PageStartRow;
}
Пока все внутри UpdatePanel, оно работает отлично!