【问题标题】:Listbox is null when removing items clientside删除项目客户端时列表框为空
【发布时间】:2021-11-17 07:50:58
【问题描述】:

我继承了一个 Web Forms 项目,但对 Web 开发还是有点陌生​​。在此页面上,我们有 2 个列表框:lstCaseLoad,填充有“Caseloads”(ID 号)和 lstAssignedCaseLoad,填充有 Form User 选择的 Caseloads。用户可以从 lstCaseLoad 中选择 Caseloads,然后点击一个按钮将它们删除并传输到 lstAssignedCaseLoad,这是使用 JavaScript 在客户端完成的。用户也可以做相反的事情,从客户端的 lstAssigned 删除到 lstCaseLoad。用户必须点击提交按钮,该按钮将发布并保存对 SQL 的更改。

将新的 CaseLoads 从 lstCaseloads 添加到 lstAssigned 并提交工作正常。从 lstAssigned 中删除是我面临问题的地方。提交时 lstAssigned 似乎变为空,因此无法保存。代码如下。

列表框:

<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;
            });

代码背后

        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);
        }

我尝试搜索并找不到相同的问题。感谢您的时间和帮助!

【问题讨论】:

    标签: javascript c# asp.net webforms listbox


    【解决方案1】:

    这是因为列表框中选项的“已选择”属性。如果您在“lstCaseLoad”中选择没有“selected”属性的选项并单击删除按钮,那么它将添加到“lstAssigned”但添加的选项也没有这个“selected”属性,因为我们正在克隆。因此,如果您想执行相反的过程,则必须在单击删除之前再次从“lstAssigned”中选择(单击)该选项。您可以通过在单击按钮之前检查选项来观察“选定”属性的行为。

    【讨论】:

    • 感谢您的回复,但我应该澄清一下。从 lstAssigned 中删除在客户端工作正常,但问题出现在代码后面,因为在执行客户端删除后,lstAssigned 在发布期间变为全空。我相信我明白了你的意思, lstAssigned 不会“记住”选定的项目,因为选定的属性没有复制过来。然而,这不是我面临的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2010-09-12
    相关资源
    最近更新 更多