提交页面获取不到js向DropdownList写的Options的值,如何处理

        前面所我所写的文章中有关两个DropdownList连动的例子。当我们需要取第二个DropdownList的值时,会碰到取不到的情况:

    比如,你页面有一个按钮,点击按钮时,获取它的值:string tmp = BList.SelectedValue; ,这时,你断点到它的下一句,在监视里面看tmp的结果是""。

    网上搜索了一下,仅仅找到一个相关的帖子:http://topic.csdn.net/t/20030212/11/1419881.html。差不多就是这个情况,而我的做法也是,在第二个DropDownList触发onchange事件后,调用javascript将当前选中值添加到隐藏域:

function  SetValue()
{
    document.Form1.PListValue.value 
=  document.getElementById( " PList " ).value;
}

PListValue为隐藏域,PList为第二个DropdownList。同时,你需要做一个补充,万一用户在连动第二个DropList后,没有更改它的选项,那就不会触发onchange事件,那么隐藏域仍然为空,你需要在js向第二个DropdownList写option对象后,将它的value赋给隐藏域。那么差不多就解决了这个问题,下面是我前面文章中,向第二个DropdownList写option的方法,红色为添加行:

function  SetOptions(response)
{
    
if (response  !=   null )
    {
        
var  ds  =  response.value;
        clearList();
                    
        
if (ds  !=   null   &&   typeof (ds)  ==   " object "
        {
            
for ( var  i = 0 ;i < ds.Rows.length;i ++
            {
                
var  option  =  document.createElement( " OPTION " );
                option.value 
=  ds.Rows[i].RegionId;
                option.text 
=  ds.Rows[i].RegionName;
                document.Form1.PList.options.add(option);
            }
        }
        document.Form1.PListValue.value 
= document.getElementById("PList" ).value;
    }
}

补充:导致这个问题的原因是,脚本数据没有写入ViewState。其实,我们可以这样处理:在第一次进入这个页面时,将第二个DropdownList所有可能的项,加载进来。然后,你第一个DropdownList触发的onchange事件后的处理——只是对这些项的筛选。

以上补充方法经过测试,行得通。

你可能感兴趣的:(JavaScript,function,object,String,脚本,null)