Как я могу передать переменную из одного метода в другой?

Моя основная структура:

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
   }
}

У меня проблемы с использованием моего catPath массив в Click событие, оно пустое, как будто никогда не устанавливается в DataBound метод. Я знаю, что это установлено до Click событие, потому что я использовал MessageBox внутри DataBound метод для отображения значений из массива, так что я делаю не так?

Я пробовал нечто подобное со списком, но у него была та же проблема. Другие переменные, такие как базовые строки, работают нормально.

Спасибо!

2 ответа

ASP.NET - это веб-технология, а сеть не имеет состояния, поэтому вам нужно поддерживать состояние другим способом. Вы должны поддерживать его в ViewState или Session. Так, ViewState.add("CathPath", catPath) или же Session.add("CatPath", catPath), ViewState будет поддерживаться, пока вы находитесь на этой странице, Session состояние будет поддерживаться, пока у вас есть активный сеанс в приложении. Тогда вы можете получить к нему доступ, как это, var catPath = ViewState["CatPath"];

Вы можете заключить это в свойство, чтобы получить к нему доступ таким же образом, как и в обычном классе.

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

Помимо использования ViewState или объекта Session, вы также можете передавать данные на страницу через связанные элементы, используя CommandEventArgs и CommandEventArgs.CommandArgument

CommandArgument может содержать любую строку, установленную программистом. Свойство CommandArgument дополняет свойство CommandName, позволяя вам предоставлять любую дополнительную информацию для команды.

Когда происходит обратная передача страницы, данные становятся доступными в обработчике связанных событий. Просто убедитесь, что подпись метода содержит правильный тип EventArgs, а не только значение по умолчанию.

void CommandBtn_Click(Object sender, CommandEventArgs e)
Другие вопросы по тегам