1

我有一个系统,在一个页面上有一个带有更新面板的网格视图。在选择 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 之后调用一个函数,并且在它解决了所有回发事件之后?

谢谢。

4

2 回答 2

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

或者另一种方式是引发泡沫事件。它们可以方便地将消息传递到您的母版页的层次结构

    RaiseBubbleEvent(Me, e)

然后在您的母版页上覆盖您的 OnBubbleEvent(只需 google 以获取一些引发和处理气泡事件的示例)

于 2012-04-24T16:09:43.227 回答
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"  %>

在页面中。

于 2012-04-25T07:33:40.200 回答