HiddenField值不会被移除

HiddenField value doesn't get removed

本文关键字:HiddenField      更新时间:2023-09-26

我有一个javascript函数,在2选择多个框之间移动项目,当我将项目从源选择框移动到目标选择框时,我将值添加到我的HiddenField,以便我可以在代码后面访问,工作正常,但当我将项目从目标选择框移回源选择框时,我尝试使用:hidMemType。Value = ";清除隐藏区域。我认为这是有效的,但显然在回发事件中,该项目仍然卡在目的地框中。请指教,谢谢。

// Move items to and fro select box
        function move(sourceFrom, sourceTo) {
            var hidOutlet = document.getElementById('<%=hdnOutlet.ClientID%>');
            var hidMemType = document.getElementById('<%=hdnMemType.ClientID%>');
            var hidMemStatus = document.getElementById('<%=hdnMemStatus.ClientID%>');
            var arrFrom = new Array();
            var arrTo = new Array();
            var arrLU = new Array();
            var i;
            for (i = 0; i < sourceTo.options.length; i++) {
                arrLU[sourceTo.options[i].text] = sourceTo.options[i].value;
                arrTo[i] = sourceTo.options[i].text;
            }
            var fLength = 0;
            var tLength = arrTo.length;
            for (i = 0; i < sourceFrom.options.length; i++) {
                arrLU[sourceFrom.options[i].text] = sourceFrom.options[i].value;
                if (sourceFrom.options[i].selected && sourceFrom.options[i].value != "") {
                    arrTo[tLength] = sourceFrom.options[i].text;
                    tLength++;
                } else {
                    arrFrom[fLength] = sourceFrom.options[i].text;
                    fLength++;
                }
            }
            sourceFrom.length = 0;
            sourceTo.length = 0;
            var ii;
            for(ii = 0; ii < arrFrom.length; ii++) 
            {
            var no = new Option();
            no.value = arrLU[arrFrom[ii]];
            no.text = arrFrom[ii];
            sourceFrom[ii] = no; // SENDS VALUE FROM DESTINATION BOX BACK TO SOURCE BOX
            hidMemType.value = ""; // TRY TO CLEAR MY HIDDEN FIELD HERE
            }

            for (ii = 0; ii < arrTo.length; ii++) {
                var no = new Option();
                no.value = arrLU[arrTo[ii]];
                no.text = arrTo[ii];
                //sourceTo.options.add(no);
                sourceTo[ii] = no;
                if (sourceTo == (document.getElementById('<%=outletToBox.ClientID%>'))) {
                    hidOutlet.value += no.value + "|";
               }
                if (sourceTo == (document.getElementById('<%=QualMemTypeToBox.ClientID%>'))) {
                    hidMemType.value += no.value + "|";
                }
                if (sourceTo == (document.getElementById('<%=MemStatusToBox.ClientID%>'))) {
                    hidMemStatus.value += no.value + "|";
                }
            }              

        (sourceTo).focus();
            if (sourceTo == (document.getElementById('<%= outletFromBox.ClientID%>'))) {
                (sourceFrom).focus();
            }
            if (sourceTo == (document.getElementById('<%= QualMemTypeFromBox.ClientID %>'))) {
                (sourceFrom).focus();
            }
            if (sourceTo == (document.getElementById('<%= MemStatusFromBox.ClientID %>'))) {
                (sourceFrom).focus();
            }
}

代码:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 PopulateSelectBoxes(hdnMemType, QualMemTypeToBox, QualMemTypeFromBox)
end Sub
 Protected Sub PopulateSelectBoxes(ByVal hdnSelectBox As HiddenField, ByVal selectBox As HtmlSelect, ByVal selectBox_Frm As HtmlSelect)
   Dim hiddenMemType(selectBox.Items.Count - 1) As String
        hiddenMemType = (Split(hdnSelectBox.Value, "|"))
        Dim tempTable As String = ""
        For Each item In hiddenMemType
            If (tempTable.IndexOf(item) = -1) Then
                If item <> "" Then
                    tempTable += item + "|"
                End If
            End If
        Next
        If tempTable <> "" Then
            hiddenMemType = (Split(tempTable, "|"))
            'We remove the items that exist in the ToBox
            For Each item In hiddenMemType
                selectBox_Frm.Items.Remove(item)
            Next
            selectBox.Items.Clear()
            selectBox.DataSource = hiddenMemType
            selectBox.DataBind()
        End If
    End Sub

我只是说说而已。您是否在下面的代码中尝试过:

myControl.value = Nothing

也许可以。

编辑:你也可以试着在那里放一个默认值,如果是默认值,你就不用对它做任何事。如果你用完了当前值就把它改回默认值

尝试禁用隐藏控件的ViewState -也许这就是保留值的原因。

在你的JS move函数中,我想象hidMemType.value = "";之后的for循环再次设置hidMemType.value。你检查过这不是事实吗?我会将for循环包含在if中,以确保它在不应该被击中时不会被击中。

我还会在function move()的末尾添加一个alert,以显示hidMemType.value在出口上的确切位置。