当前位置:编程学习 > C#/ASP.NET >>

Dropdownlist 取值

我有一个dropdownlist 是根据 其他控件选择项动态生成的,里面的item都是从数据库拿的,现在选择Dropdownlist中item后,要取出所选的数据,怎么办?

我的dropdownlist是放在panel里的,如果设了autopostback,则会刷新页面,dropdownlist也没了(因为是动态生成的)。请高手指点 --------------------编程问答-------------------- 你是不是哪里设得不对啊。就算是动态生成的,有状态会保存的。不会出现控件消失的吧。 --------------------编程问答-------------------- 检查你的page_laod..是不是没写(!ispostback) --------------------编程问答-------------------- 绑定写在IsPostBack里
--------------------编程问答-------------------- 最好贴出你的代码、、、 --------------------编程问答-------------------- 你启用autopostback,那么执行的text_changed事件中,在次绑定你的dropdownlist就可以了 --------------------编程问答-------------------- 用js取值:
给你个例子:
var select1=document.all.ddl1;
if(select1.options.length>0)
{
    var id=select1.options[select1.selectedIndex].value;
}
  --------------------编程问答-------------------- 绑定要写在ISpost里
--------------------编程问答-------------------- 你表达的不清楚,不行就把你的代码贴出来吧 --------------------编程问答-------------------- Dropdownlist.selectValue 取的就是选择的值 --------------------编程问答-------------------- 贴代码,更直接! --------------------编程问答-------------------- 无码无真相 --------------------编程问答-------------------- 无码才有真相,有码的还看个毛 --------------------编程问答--------------------
引用 12 楼 zhong2006 的回复:
无码才有真相,有码的还看个毛


--------------------编程问答-------------------- 其实问题很简单,关于页面的生成周期楼主应该好好的去看看。
动态添加控件你可以在页面加载控件(Load事件)之前。比如Init事件。

protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
             DropDownList d = new DropDownList();
                d.Items.Add("全部");
                d.Items.Add("第一个");
                d.Items.Add("第二个");
                d.AutoPostBack = true;
                form1.Controls.Add(d);   
            
        }
--------------------编程问答-------------------- 楼主把代码帖出来 --------------------编程问答-------------------- 直接用FindControl就能取到DropDownList,然后直接就用SelectValue取值
需要注意的是 动态生成的控件,生成的代码不能放在!IsPostBack里边,否则FindControl找不到的 --------------------编程问答-------------------- 原因很简单,解决办法有两个
一是IsPostBack方面
二是创建DropDownList后再绑定数据,你可能是绑定数据后才Controls.Add的
--------------------编程问答-------------------- 顶14和17楼的,楼主表达的意思很模糊。 --------------------编程问答-------------------- --------------------编程问答-------------------- 不简单?
当你要获取动作时,找到控件.txt --------------------编程问答-------------------- autopostback回调结束的时候,
把动态生成dropdownlist的方法重新执行一遍。 --------------------编程问答--------------------
引用 2 楼 jackyuen1 的回复:
检查你的page_laod..是不是没写(!ispostback)
--------------------编程问答-------------------- 借地方问下
在MSDN中DropDownlist 的Item项的方法怎么查? --------------------编程问答-------------------- 大爷的。。。怪我没说清楚。。我的动态生成不是页面生成触发的,所以写在pageload,init什么的不可取,我是根据一个dropdownlist的indexchanged事件生成的另一个 Dropdownlist --------------------编程问答-------------------- 要记的ASP.NET所有控件都必须在页面postback回服务器的时候重新加载,你动态加载的控件也一样。如果你点击 "添加 "按钮动态加载1个控件,你再点击一次其他的按钮postback回服务器,你会发现你前面添加的控件消失了。 

所以如果你动态加载的控件不是写在Page_Load中,那你必须想办法记住你动态添加的控件,并在页面postback后重新加载一次。 --------------------编程问答-------------------- 解决办法:

1.可以直接在页面放隐藏域用js来将选项值赋值到隐藏域中(如果有多个值,可以用‘,’号分隔),然后返回服务端,获取隐藏域的值。

2.可以将你动态创建的控件类型和id保存到全局变量中,每次postback后在load时候都要在load事件中根据保存的全局变量值重新创建,否则动态添加的事件就执行不了。在load事件重新创建控件后原有的事件正常执行,如dp_SelectedIndex,而且还能获取到选择后的值。

建议:用第一种方法。 --------------------编程问答-------------------- 依据我的经验,如果是动态创建的控件,好像asp.net不会为你保存状态,除非你每次都创建。

所以还是建议,用隐藏和显示来做。。

--------------------编程问答-------------------- 如果在page——load中创建的控件,一定不要放到if(!ispostback)中。 --------------------编程问答--------------------
引用楼主 hero7086 的回复:
我有一个dropdownlist 是根据 其他控件选择项动态生成的,里面的item都是从数据库拿的,现在选择Dropdownlist中item后,要取出所选的数据,怎么办?

我的dropdownlist是放在panel里的,如果设了autopostback,则会刷新页面,dropdownlist也没了(因为是动态生成的)。请高手指点

给你一段代码参考:
page_Load(......)
{
    if(viewstate["isOk"]==true)
{
    CreateDrop();
}
}
button1_click(......)
{
   CreateDrop();
}

private void CreateDrop()
{
   //create the dropdownlist control and define the event
   viewstate["isOk"]=true;
} --------------------编程问答-------------------- 顶一下!
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,