How to get a reference to the control that caused a post back

Here is some old code I found (in VB.NET) the will tell you what control caused the post back.

  ' Return a reference to the control that caused the last postback,
'  even from the Page_Load event!
' It requires in input a reference to the posted-back page
' (this is necessary if you want to be able to move this function in a separate 
' class
' instead of in a page's codebehind class
' Example:
'    Private Sub Page_Load(ByVal sender As System.Object,
'  ByVal e As System.EventArgs) Handles MyBase.Load
'        Dim postbackCtl As Control = GetPostbackControl(Me)
'        If Not postbackCtl Is Nothing Then
'            lblResult.Text = postbackCtl.ID
'        End If
'    End Sub

Function GetPostbackControl(ByVal targPage As Page) As Control
    If targPage.IsPostBack Then
        ' try to find the name of the postback control in the hidden 
        ' __EVENTTARGET field
        Dim ctlName As String = targPage.Request.Form("__EVENTTARGET")
        ' if the string is not null, return the control with that name
        If ctlName.Trim().Length > 0 Then
            Return targPage.FindControl(ctlName)
        End If
        ' the trick above does not work if the postback is caused by standard 
        ' buttons.
        ' In that case we retrieve the control the ASP-way: by looking in the 
        ' Page's Form collection
        ' to find the name of a button control, that actually is the control 
        ' that submitted the page
        Dim keyName As String
        For Each keyName In targPage.Request.Form
            Dim ctl As Control = targPage.FindControl(keyName)
            ' if a control named as this key exists,
            '  check whether it is a button - if it is, return it!
            If Not ctl Is Nothing Then
                If TypeOf ctl Is Button Then
                    Return ctl
                End If
            End If
    End If

    Return Nothing
End Function
[tweetmeme only_single=”false”]

Got something to add?

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s