我的系统在一个页面上有一个带有更新面板的网格视图。在选择gridview的一行时,系统使用CommandName和CommandArgument进行回发以发布所选行,然后将Session变量设置为所发布的所选行的ID。其他控件正确运行Async,并且已在RowDataBound事件上使用此按钮注册了有问题的按钮。
Dim gvRowSelect As GridViewRow = e.Row
Dim imbSelect As ImageButton = DirectCast(gvRowSelect.FindControl("imbSelect"), ImageButton)
ScriptManager.GetCurrent(Page).RegisterPostBackControl(imbSelect)
我想尝试在按钮命令上获取此会话,并在主页面中以某种方式设置标签到当前会话。在imbSelect命令中,代码为:
Dim cellSnapshot As TableCell = gvSnapshots.Rows(e.CommandArgument).Cells(0)
Session("Snapshot") = cellSnapshot.Text
在主页中是否有在Page_Load之后调用函数,并在解决了所有回发事件之后?
感谢。
答案 0 :(得分:1)
您的母版预渲染将在所有回发事件完成后发生
Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
End Sub
或者另一种方法是在母版页上创建属性并直接从方法
更新 'On your master page
Private _myValue As String 'If you want the master page to remember this between postbacks use an asp:HiddenField instead of a string, or store it in the Session
Public Property MyProperty() As String
Get
Return _myValue
End Get
Set(ByVal value)
_myValue = value
End Set
End Property
'On your userControl or Page
CType(Me.Master, MyMasterPage).MyProperty
或另一种方式是举起泡沫事件。它们可以方便地将消息传递回主页上的hirarchy
RaiseBubbleEvent(Me, e)
然后在你的母版页上覆盖你的OnBubbleEvent(只是谷歌提供一些提升和处理泡沫事件的例子)
答案 1 :(得分:0)
我已经设法使用MSDN上的一些隐藏知识的组合来解决这个问题。
http://msdn.microsoft.com/en-us/library/xxwa0ff0.aspx
这显示了如何创建对母版页的引用,因此我所要做的就是在母版页上创建一个在其他任何地方都没有引用的函数。然后当按钮事件被触发时:
Dim cellSnapshot As TableCell = gvSnapshots.Rows(e.CommandArgument).Cells(0)
Session("Snapshot") = cellSnapshot.Text
gvSnapshots.DataBind()
Master.PageSetTitles()
即。 PageSetTitles函数获取Session变量并在
中设置标签包括这个:
<%@ MasterType VirtualPath="~/MasterPages/Site.Master" %>
在页面中。