ASP.Net-<select> elementi che non vengono postati dopo jQuery popola la lista




listbox asp.net-2.0 (2)

Ho un ListBox ASP.Net che sto cercando di popolare tramite jQuery, usando il seguente frammento:

    $("#MyList_btnAddAll").click(function(e) {
    e.preventDefault();
    $('#MyList_lstAll option').appendTo('#MyList_lstSelected');
});

Il codice ha due ListBox in effetti, uno a "fonte" e l'altro a "destinazione". Come puoi vedere sopra i ListBoxes sono MyList_lstAll e MyList_lstSelected. Questi sono resi nel browser come elementi, come ci si aspetterebbe.

Il jQuery funziona alla grande, gli oggetti si spostano da un ListBox all'altro, il DOM viene aggiornato ma quando pubblico la mia pagina, il postback non indica alcuna modifica al ListBox. So che ci sono trucchi che coinvolgono i postback di jQuery e ASP.Net, ma qualcuno potrebbe guidarmi un po 'su cosa sta succedendo e su come posso farlo funzionare?

[MODIFICARE]

Su richiesta, ecco alcuni altri ASP.Net e HTML risultanti. Di seguito sono elencate le dichiarazioni ListBox e pulsanti nel controllo ascx che le contiene:

 <GLP:ListBox ID="lstAll" CssClass="LIST_BOX_MEDIUM" runat="server" SelectionMode="Multiple"/>

<asp:LinkButton ID="lnkAddAll2" CssClass="LIST_SELECT" runat="server" OnClick="btnAddAll_Click"/>

<GLP:ListBox ID="lstSelected" CssClass="LIST_BOX_MEDIUM" runat="server" SelectionMode="Multiple"/>

E l'HTML risultante:

<select class="LIST_BOX_MEDIUM" id="MyList_lstAll" multiple="multiple" name="MyList:lstAll" size="4">
 <option value="641">Item1</option><option value="598">Item2</option>
</select>

<input type="submit" class="BUTTON_SMALL_N0_IMAGE" id="MyList_btnAddAll" value="Add All" name="MyList:btnAddAll" style="color: rgb(0, 0, 0);">

<select class="LIST_BOX_MEDIUM" id="MyList_lstSelected" multiple="multiple" name="MyList:lstSelected" size="4">
 <option value="642">Item3</option><option value="599">Item4</option>
</select>

So che le modifiche all'elemento jQuery / ListBox non si riflettono in ViewState, ma dal momento che sono nel DOM quando la pagina viene pubblicata non sarebbero incluse nei dati di postback e quindi prelevate dai rispettivi controlli?


IIRC, non puoi farlo funzionare a causa di ciò che ASP.Net si aspetta nel ListBox sul postback. Un modo che ho usato in passato è quello di creare un campo di input nascosto con runat = "server" e popolare gli ID selezionati, separati da punti e virgola.

Il valore di input nascosto sarà disponibile sul postback.


Il problema è che il tuo controllo viene ricreato al postback utilizzando il viewstate (o lo stato del controllo) che ovviamente non riflette le tue modifiche. Una possibilità è quella di accedere al post direttamente usando l'oggetto Request sul lato server (come ha detto Ray poco prima)





postback