Ok, I'm about to go crazy here, because the reversed definition of insanity is doing the same thing and getting different results.
For the given 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>
You would think that both DropDownLists would behave similarly - that is, upon postback, both would go through the same exact lifecycle and work normally. After all, the only difference is that they use different datasources (both IEnumerable<Whatever>) and access different properties for the Text/Value fields.
So I expect that on a postback (via form submit), by the time Page.LoadComplete executes, both the DDLs should have loaded 1) loaded their Items via the DataSource and 2) loaded their state (SelectedIndex) from the postback data.
Unfortunately, that is not the case. What I am seeing is that ddl1 will execute LoadViewState (loads Items) then LoadPostData (sets SelectedIndex), but ddl2 does not execute LoadViewState - only LoadPostData. At which point ddl2 is now incorrect since if it doesn't have Items then it ignores the value from LoadPostData.
So I am flabbergasted. I have cleaned the solution and restarted VS2010 several times, i've added EnableViewState="true" to ddl2, and yet the inconsistent behavior persists.
Can somebody shed some light here as to why the DropDownLists behave differently despite being configured nearly identically?
CLARIFICATION
My page is drastically more complicated than 2 DropDownLists, I only specified 2 in the example for clarity's sake. There's actually 42 DDLs, 7 checkboxes, 5 textboxes, and 2 listboxes
UPDATE
I tried
A) swapping datasources/fields - no diff
B) using the same datasources/fields - no diff
C) Removing ddl1 - ddl2 started working again!
D) Added ddl3 (a copy of ddl1) - neither ddl2 or ddl3 worked
So I think I'm hitting against some sort of ViewState size limitiation here - i'm going to recode some of my DropDownLists such that they don't store the Items in the ViewState, but instead reload it from the DataSource prior to LoadPostData.