Классический сценарий: возьмите пользовательский ввод, получите результат поиска и отобразите его на страницах для пользователя. Затем мне нужно отображать кнопки для First, Next, Previous и т. Д., И я поддерживаю текущую страницу пользователей в viewstate. Все хорошо, отлично работает.Внедрение числовых номеров страниц в результатах поиска
Тогда мне нужно реализовать число страниц, доступных в интерактивном режиме, т.е. 1-2-3-4-5-6 и т. Д.
Рендеринг их прост. Я генерирую элемент управления linkbutton во время выполнения, добавляю commandargument с номером страницы и добавляю к нему обработчик, поэтому клики должны обрабатываться. Затем я добавляю его в местозаполнитель, и он отображается, как ожидалось.
Но тогда ... Если бы у меня еще не было побритой головы, я бы вытащил из моих волос, чтобы события срабатывали, как и ожидалось каждый раз.
Как мне это сделать, поэтому мои события всегда подключены и могут срабатывать при вызове пейджинговых кнопок?
Ниже приведены важные части кода, некоторые псевдо, чтобы сделать его (надеюсь) более понятным, что я делаю.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Search()
End If
End Sub
Sub Search
'Misc databinding stuff, searches and displays results for the page specified in Me.CurrentPage
RenderPagingControls()
End Sub
Sub RenderPagingControls
'loop throug pagenumbers, Build a linkbutton control, add it to a placeholder
AddHandler lbn.Click, AddressOf lbnNumber_Click
lblPageNumbers.Controls.Add(lbn)
...
End Sub
Protected Sub lbnNumber_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim b As LinkButton = CType(sender, LinkButton)
Me.CurrentPage = CInt(b.CommandArgument)
Search()
End Sub
Public Property CurrentPage() As Integer
Get
Dim o As Object = Me.ViewState("CurrentPage")
If o Is Nothing Then
Return 1
Else
Return CType(o, Integer)
End If
End Get
Set(ByVal value As Integer)
Me.ViewState("CurrentPage") = value
End Set
End Property
Protected Sub lbnNumber_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim b As LinkButton = CType(sender, LinkButton)
Me.CurrentPage = CInt(b.CommandArgument)
Search()
End Sub
@Kjensen - Я добавил альтернативу в своем ответе с использованием ретранслятора. Вы можете проверить это. – Keltex