tags:

views:

239

answers:

5

Hi, Im making a site in Visual Studio using vb and I have a variable in page_load but need its value in the event handler of a button for passing on session.

Any suggestions on how I can do this? Any help is appreciated

+1  A: 

You can store a value in the CommandArgument property of a Button:

btn.CommandArgument = "Your value"

And then when handling the event you can pull it out:

CType(sender, Button).CommandArgument

You could also make a new class that extends Button and create new properties like below if you need multiple arguments:

Class SessionButton
    Inherits Button

    Public Property SessionGUID() As Guid
        Get
            Dim s As Guid = Nothing
            If Not String.IsNullOrEmpty(ViewState("SessionGUID")) Then
                s = New Guid(ViewState("SessionGUID").ToString())
            End If

            Return s
        End Get
        Set(ByVal value As Guid)
            ViewState("SessionGUID") = value.ToString()
        End Set
    End Property

End Class
Dave L
A: 

You can store it in a viewstate backed property:

Public Property MyStringVar() As String
   Get
     If ViewState("MyStringVar") = Nothing Then
  Return String.Empty
 End If
 Return ViewState("MyStringVar").ToString()
End Get
Set
 ViewState("MyStringVar") = value
End Set
End Property

Now using this property you can save your variable on page load and access it in the button click event handler.

EDIT: updated to VB

Jimmie R. Houts
+1  A: 

couldn't you just make the variable a class scoped variable, instead of local?

MasterMax1313
A: 

You could also create a class that encapsulates the action. Then you can capture any data you want and easily add to it later.

void Page_Load()
{
    myBtn.Click += new MyButtonClass(variable).Run;
}

class MyButtonClass
{
    int Param;

    MyButtonClass(int param)
    {
        Param = param;
    }

    public void Run(object sender, EventArgs args)
    {
        // Do something usefull
    }
}

If the data is created/retrieved on every Page_Load, this will work. If it is wrapped around an (! IsPostBack), the data must be stored in a session. Fortunatly, the class can be easily modified to store/load the variable from a session parameter.

I'm sorry for the c# code, maybe someone else can translate it then remove this message?

Alan Jackson
A: 

you declare the variable outside the page_load and then you can use it where you want :)

answerguy