Доступ к публичному свойству с помощью Repeater_ItemCommand - PullRequest
0 голосов
/ 19 августа 2011

У меня есть пользовательский элемент управления, который имеет общедоступное свойство, например:

public string[] ImageIDArray {
    get;
    set;
}

В моем контроле у ​​меня есть повторитель, а внутри него есть стандартная кнопка asp.net. Когда кнопка нажата, мне нужно манипулировать свойством ImageIDArray. Я использую обработчик события ItemCommand.

Проблема в том, что обработчик ItemCommand запускает ImageIDArray со значением NULL. Итак, на самом деле есть 2 вопроса.

1) На каком этапе жизненного цикла страницы устанавливаются свойства (если вы не установите их программно) 2) Как мне обойти эту проблему. Нужно ли хранить значение в viewstate?

Заранее спасибо Al

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Весь жизненный цикл страницы действительно не имеет состояния, кроме состояния просмотра, которое дает восприятие состояния.Элементы управления на странице воссоздаются каждый раз, когда вы выполняете обратную передачу. Эта статья 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.

1 голос
/ 19 августа 2011

Пожалуйста, посмотрите на эту статью. Событие Repeater.ItemCommand

Я полагаю, что в нем содержится соответствующая информация, которая вам требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...