Лучший способ симулировать «SelectedIndexChanged» для элемента управления DropDownList ASP.NET с отключенным ViewState - PullRequest
2 голосов
/ 17 января 2009

Я нашел много постов, где люди пытаются обойти проблему SelectedIndexChanged, когда EnableViewState='false'.

не работает.

Я немного сбит с толку, почему контрольное состояние не срабатывает и не позволяет ему работать, но это бонусные очки, если кто-то тоже может это объяснить.

Некоторые из "хаков" довольно "хакерские". Например, установить значение в состоянии просмотра самой страницы, соответствующее раскрывающемуся значению, а затем сравнить это значение с полученным во время обратной передачи.

Я ищу лучшее и элегантное решение (если оно есть).

Я не знаю, будет ли это умный производный элемент управления или что-то более умное, но я хочу убедиться, что решение достаточно универсально, чтобы быть «надежным», а не просто взломать, который работает только для конкретной страницы ( это обычное дело для таких хаков!).

Ответы [ 3 ]

5 голосов
/ 17 января 2009

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

TRULY Понимание ViewState

Это не легко читается, но охватывает все проблемы, с которыми люди обычно сталкиваются при просмотре состояния. И это объясняет, почему все работает, если вы заполняете в Page_Init, а не Page_Load.

0 голосов
/ 08 июля 2009

Свяжите список перед добавлением его в коллекцию элементов управления (не после того, как комментатор говорит выше).

- автор указанной статьи:)

0 голосов
/ 17 января 2009

Попробуйте загрузить свои данные в DropDownList на более раннем этапе. То есть. в InitComplete. Я не проверял это, но я думаю, что это должно сработать.

EDIT:

Это не сработало. Я проверил это, и это не работает удовлетворительно. Как отметил Кен Браунинг в другом ответе на этот вопрос, событие SelectedIndexChanged ВСЕГДА запускается, если SelectedIndex отличается от своего начального значения.

Почему SelectedIndex не хранится в ControlState, а не в ViewState. Можем ли мы обмануть ViewState, чтобы отслеживать только SelectedIndex, не сохраняя коллекцию Items?

...