the - ASP.Net-los elementos<select> no se vuelven a publicar después de que jQuery rellene la lista
option selected jquery (3)
Tengo un ListBox de ASP.Net que intento llenar a través de jQuery, usando el siguiente fragmento de código:
$("#MyList_btnAddAll").click(function(e) {
e.preventDefault();
$(''#MyList_lstAll option'').appendTo(''#MyList_lstSelected'');
});
El código tiene dos ListBoxes de hecho, uno una "fuente" y el otro un "destino". Como puede ver arriba, los ListBoxes son MyList_lstAll y MyList_lstSelected. Estos se representan en el navegador como elementos, como era de esperar.
El jQuery funciona muy bien, los elementos se mueven de un ListBox a otro, el DOM se actualiza, pero cuando publico mi página, la devolución de datos no indica ningún cambio en el ListBox. Sé que hay errores relacionados con las devoluciones de jQuery y ASP.Net, pero ¿podría alguien guiarme sobre lo que está ocurriendo posiblemente y cómo puedo hacer que funcione?
[EDITAR]
Por solicitud, aquí hay un poco más de ASP.Net y HTML resultante. A continuación se muestran las declaraciones ListBox y de botón en el control ascx que las 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"/>
Y el HTML resultante:
<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>
Sé que las modificaciones al elemento jQuery / ListBox no se reflejan en ViewState, pero dado que están en el DOM cuando se publica la página, ¿no se incluirán en los datos de devolución y luego se seleccionarán con sus respectivos controles?
Creo que deberá obtener la lista de elementos seleccionados directamente de la solicitud, en lugar de hacerlo desde las propiedades de control de asp.net, como esta:
string results = Request.Form[list_box.UniqueID];
El problema es que su control se recrea en la devolución de datos utilizando viewstate (o estado de control) que, por supuesto, no refleja sus cambios. Una posibilidad es acceder a la publicación directamente utilizando el objeto Request en el lado del servidor (como Ray dijo justo antes)
IIRC, no puede hacer que esto funcione debido a lo que ASP.Net espera en el ListBox en la devolución de datos. Una forma que he usado en el pasado es crear un campo de entrada oculto con runat = "server" y rellenar las ID seleccionadas allí, separadas por punto y coma.
El valor de entrada oculto estará disponible en la devolución de datos.