Как я могу передать переменную из одного метода в другой?
Моя основная структура:
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)