HiddenField值不会被删除

时间:2011-11-01 05:50:47

标签: javascript asp.net vb.net

我有一个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

3 个答案:

答案 0 :(得分:0)

在这里大声思考。 你有没有在后面的代码中尝试过这个:

myControl.value = Nothing

也许这会奏效。

编辑: 您也可以尝试在其中放置一个默认值,如果它是默认值,您就不用它做任何事情。如果您已完成当前值,只需将其更改回默认值

答案 1 :(得分:0)

尝试在隐藏的控件上禁用ViewState - 也许这就是保留值的内容。

答案 2 :(得分:0)

在您的JS move函数中,我想在for之后的hidMemType.value = "";循环再次设置hidMemType.value。你有没有检查过这不是这种情况?我会将for循环括在if中,以确保它不会被击中。

我还会在alert末尾添加function move(),以准确显示退出时hidMemType.value的内容。