Весь жизненный цикл страницы действительно не имеет состояния, кроме состояния просмотра, которое дает восприятие состояния.Элементы управления на странице воссоздаются каждый раз, когда вы выполняете обратную передачу. Эта статья MSDN хорошо объясняет это.Данные, которые вы ранее загрузили в визуализированные элементы управления, хранятся в viewstate (для элементов управления vs enabled) и загружаются обратно к ним, если пользователь не изменил их перед повторной публикацией.Если пользователь изменил их и вы выполняете обратную передачу, эти значения загружаются в событие LoadPostBackData
, которое запускается после заполнения состояния просмотра.Я не знаю, где и когда вы загружаете данные в ваш ImageIDArray, но я предполагаю, что вы не загружаете их при каждой обратной передаче, поэтому данные пусты в обработчике события itemCommand.
Чтобы ответить на ваш первый вопрос, просто наличие свойства ничего не делает, важно, где вы устанавливаете значение для него.Если вы присваиваете значение свойству в файле ascx, оно остается с элементом управления.В противном случае вам придется загружать его каждый раз.
Загружать ImageIdArray
для события Page_Load
пользовательского элемента управления.Событие page_Load запускается до того, как ваше событие ItemCommand
будет запущено.Если вы не хотите загружать ImageArray
на каждую обратную передачу, вы можете сохранить ее в session
или viewstate
.Хранение в сеансе означает, что данные доступны для вас во время сеанса пользователя.ViewState
действует только до тех пор, пока вы находитесь на этой странице.
Вы можете добавить данные в ViewState
вручную как ViewState["ImageIdArray"] = ImageIdArray.
Или вы можете изменить свою собственность как
public string[] ImageIdArray
{
get { return (string[])(ViewState["ImageIdArray"] ?? null); }
set { ViewState["ImageIdArray"] = value; }
}
Здесь - статья, которая немного больше объясняет управление состоянием в asp.net.