を使用するユーザー コントロールがありますUpdatePanel
。コントロールは基本的に、Button
. ユーザーが をクリックするButton
と、値を選択できるモーダル ポップアップが開きます。テーブルのデータ ( をRepeater
として使用DataSource
) は、部分的なポストバック ( が起動したとき) の間のセッション変数にUpdatePanel
、オブジェクトのリストとして格納されます。コントロールが 1 つしかない場合はすべて正常に機能しますが、このコントロールを同じページで複数回使用すると、セッション変数内のオブジェクトのリストが結合され、コントロールごとに分離されません。これは、セッション変数名が一意ではないためではないかと考えたので、変数を呼び出したり使用したりする場所はどこでも、次のようにします。
Dim sessionName as string = Me.UniqueID & "_" & "userNotificationDS"
Session(sessionName) = myListOfObjects
しかし、これは結果を変えていません。ここで私が間違っていることを知っている人はいますか?完全なコードが役立つと思われる場合は、お知らせください。
コントロール サーバー コード:
Protected Sub delete_click(ByVal sender As Object, ByVal e As EventArgs)
Dim btn As LinkButton = CType(sender, LinkButton)
Dim ds As New List(Of myObject)
sessionName = Me.UniqueID & "_" & "myDataSet"
ds = Session(sessionName.ToString)
Dim id As String = btn.CommandArgument
ds.RemoveAll(Function(userNotification) userNotification.User.NetworkID.Equals(id))
Session(sessionName.ToString) = ds
bindData(ds)
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
sessionName = Me.UniqueID & "_" & "myDataSet"
If (Session(sessionName.ToString) IsNot Nothing) Then
bindData(Session(sessionName.ToString))
End If
End Sub
Private Function buildPagedSet(ByVal userNotification As List(Of myObject)) As PagedDataSource
Dim ps As PagedDataSource = New PagedDataSource()
ps.DataSource = userNotification
ps.AllowPaging = True
ps.PageSize = numRows
Return ps
End Function
Public Sub bindData(ByVal commentList As List(Of myObject))
sessionName = Me.UniqueID & "_" & "myDataSet"
Dim currentPage As Integer = 0
Dim ps As PagedDataSource
Dim numLable As Label
Dim denomLable As Label
Dim curPage As Integer = 1
Dim totalPage As Integer = 0
If (Not myObject Is Nothing) Then
Try
ps = buildPagedSet(commentList)
totalPage = ps.PageCount
Session(sessionName.ToString) = commentList
rowTotal = ps.Count
'for paging
If Not (ViewState(Me.UniqueID & "_Page") Is Nothing) Then
currentPage = Convert.ToInt32(ViewState(Me.UniqueID & "_Page"))
Else
ViewState(Me.UniqueID & "_Page") = 1
currentPage = 1
End If
If (currentPage > 0 And currentPage <= ps.PageCount) Then
ps.CurrentPageIndex = currentPage - 1
Me.dataRepeateUsers.DataSource = ps
Me.dataRepeateUsers.DataBind()
ElseIf (currentPage >= ps.PageCount) Then
ViewState(Me.UniqueID & "_Page") = Convert.ToInt32(ViewState(Me.UniqueID & "_Page")) - 1
ElseIf (currentPage <= 0) Then
ViewState(Me.UniqueID & "_Page") = Convert.ToInt32(ViewState(Me.UniqueID & "_Page")) + 1
Else
End If
Catch ex As Exception
Throw
End Try
Else
Dim emptySet As New List(Of myObject)
Me.dataRepeateUsers.DataSource = emptySet
Me.dataRepeateUsers.DataBind()
End If
End Sub
コントロールは次のようにインスタンス化されます。
Me.notifier1.bindData(notificationList)
この例では、ユーザーが notifier1 から何かを削除すると (delete_click イベント)、オブジェクトはリストから削除され、セッションに再び追加されます。なんらかの原因で notifier2 の更新パネルが起動すると、notifier1 とまったく同じデータが表示されます。