Heredé un proyecto de formularios web y todavía soy algo nuevo en el desarrollo web. En esta página, tenemos 2 cuadros de lista: lstCaseLoad, que se completa con "Casos" (números de identificación) y lstAssignedCaseLoad, que se completa con Casos seleccionados por el usuario del formulario. El usuario puede seleccionar Cargas de casos de lstCaseLoad y pulsar un botón para eliminarlas y transferirlas a lstAssignedCaseLoad, que se realiza en el lado del cliente con JavaScript. El usuario también puede hacer lo contrario, eliminando de lstAssigned a lstCaseLoad en el lado del cliente. El usuario debe presionar el botón Enviar que publicará y guardará los cambios en SQL.
Agregar nuevos CaseLoads de lstCaseloads a lstAssigned y enviar funciona bien. Eliminar de lstAssigned es donde tengo problemas. lstAssigned parece volverse nulo cuando se envía y, por lo tanto, no se puede guardar. Código a continuación.
Cuadros de lista:
<asp:ListBox ID="lstCaseLoad" runat="server" SelectionMode="Multiple" /> <asp:ListBox ID="lstAssignedCaseLoad" runat="server" Height="175px" SelectionMode="Multiple" /> //Adding Caseload to Assigned $("#btnAddCaseLoad").bind("click", function () { var options = $("[id*=lstCaseLoad] option:selected"); $("[id*=lstAssignedCaseLoad]").append($(options).clone()); $(options).remove(); return false; }); //Removing Caseload from Assigned $("#btnRemoveCaseLoad").bind("click", function () { var options = $("[id*=lstAssignedCaseLoad] option:selected"); $("[id*=lstCaseLoad]").append($(options).clone()); $(options).remove(); return false; });Código detrás
protected void Page_Load() { if (!IsPostBack) { //Retrieving and Binding listboxes. No issues here GetData(); BindData(); } else { var test= Request.Form.AllKeys; //Temp variable to check all elements for debugging. lstAssignedCaseLoad is missing when deleting. Is fine when adding new caseload //Read listAssignedCaseLoad items to comma seperated strings. Becomes null when trying to remove items string strCaseLoad = Request.Form[lstAssignedCaseLoad.UniqueID]; //Transfer string strCaseload to (field)List<string> for saving. Works fine when string is not empty userCaseLoadList = ProcessListString(strCaseLoad, lstAssignedCaseLoad); } } //Submit button method. Works as intended protected void EditUser_Click(object sender, EventArgs e) { identityMgr.EditUser(Email.Text, userRoleList, userCaseLoadList); }Intenté buscar y no puedo encontrar el mismo problema. ¡Gracias por tu tiempo y ayuda!
Esto se debe al atributo "seleccionado" de la opción en el cuadro de lista. Si selecciona la opción en "lstCaseLoad" que no tiene el atributo "seleccionado" y hace clic en el botón Eliminar, se agregará a "lstAssigned", pero la opción agregada tampoco tiene este atributo "seleccionado" porque estamos clonando. Entonces, si desea hacer el proceso inverso, debe seleccionar (hacer clic) esa opción nuevamente desde "lstAssigned" antes de hacer clic en eliminar. Puede observar el comportamiento del atributo "seleccionado" inspeccionando las opciones antes de hacer clic en el botón.