Хорошо, я собираюсь сойти с ума здесь, потому что обратное определение безумия делает то же самое и получает разные результаты.
Для данного ASPX:
<asp:DropDownList ID="ddl1" runat="server" DataSource="<%# DataContext.Items1 %>"
DataValueField="Id" DataTextField="Text" AppendDataBoundItems="false"></asp:DropDownList>
<br/>
<asp:DropDownList ID="ddl2" runat="server" DataSource="<%# DataContext.Items2 %>"
DataValueField="Key" DataTextField="Value" AppendDataBoundItems="false"></asp:DropDownList>
Можно подумать, что оба DropDownLists будут вести себя одинаково, то есть после обратной передачи оба будут проходить один и тот же жизненный цикл и работать нормально.В конце концов, единственное различие заключается в том, что они используют разные источники данных (оба IEnumerable ) и имеют доступ к различным свойствам полей Text / Value.
Поэтому я ожидаю, что при обратной передаче (посредством отправки формы),во время выполнения Page.LoadComplete оба DDL должны были загружаться: 1) загружать свои Элементы через DataSource и 2) загружать свое состояние (SelectedIndex) из данных обратной передачи.
К сожалению, это не так.Я вижу, что ddl1 будет выполнять LoadViewState (загружает элементы), а затем LoadPostData (устанавливает SelectedIndex), но ddl2 не выполняет LoadViewState - только LoadPostData.В этот момент ddl2 теперь неверен, поскольку, если у него нет Items, он игнорирует значение из LoadPostData.
Так что я ошеломлен.Я очистил решение и перезапустил VS2010 несколько раз, я добавил EnableViewState = "true" в ddl2, и все же противоречивое поведение сохраняется.
Может кто-нибудь пролить свет на то, почему DropDownLists ведут себя по-разному, несмотря на то, что настроены почти одинаково?
УТОЧНЕНИЕ
Моя страница значительно сложнеечем 2 DropDownLists, я только указал 2 в примере для ясности.Там на самом деле 42 DDL, 7 флажков, 5 текстовых полей и 2 списка
ОБНОВЛЕНИЕ
Я пыталсяA) обмен источниками данных / полями - без различийБ) использование одних и тех же источников данных / полей - без различийВ) Удаление ddl1 - ddl2 снова начал работать! D) Добавлен ddl3 (копия ddl1) - ни ddl2, ни ddl3 не сработали
Так что я думаю, что я бьюсь здесь о каком-то ограничении размера ViewState здесь - я собираюсь перекодировать некоторые из моих DropDownLists так, чтобы они не сохраняли Элементы в ViewState, а вместо этого перезагрузят его изисточник данных до LoadPostData.