How can I pass a variable from one method to another?

1.1k Views Asked by At

My basic structure:

public partial class _Search : BasePage
{
   private string[] catPath = new string[3]; //set string array

   ...more code...

   protected void Categories_DataBound(object sender, EventArgs e)
   {
      for (int i = 3; i > 0; i--)
      {
         catPath[i] = somestring; //fills array
      }
   }

   ...more code...

   protected void Cat1_Click(object sender, EventArgs e)
   {
      MessageBox.Show(catPath[0]); //uses array
   }
}

I'm having trouble using my catPath array in the Click event, it's empty as if never set in the DataBound method. I know it's set before the Click event because I've used a MessageBox inside the DataBound method to display values from the array so what am I doing wrong?

I've tried something similar with a List but it had the same problem. Other variables like basic strings are working fine though.

Thanks!

2

There are 2 best solutions below

0
On

ASP.NET is a web technology and the web is stateless, so you have to maintain state another way. You have to maintain it in ViewState or Session. So, ViewState.add("CathPath", catPath) or Session.add("CatPath", catPath). ViewState will be maintained while you're on that page, Session state will be maintained while you have an active session in the application. Then you can access it like this, var catPath = ViewState["CatPath"];

You can wrap that in a property so you can access it in a similar way to how you would a normal class.

public string[] CatPath {
   get {
      return ViewState["CatPath"];
   };
}
0
On

In addition to using the ViewState or the Session object you can also pass data to the page through the bound items using CommandEventArgs and the CommandEventArgs.CommandArgument

The CommandArgument can contain any string set by the programmer. The CommandArgument property complements the CommandName property by allowing you to provide any additional information for the command.

When the Page Postback occurs the data is available in the bound event handler. Just ensure the method signature contains the correct EventArgs type and not just the default.

void CommandBtn_Click(Object sender, CommandEventArgs e)