问题:通过datatable绑定dropdownlist的值,切换选项时,选择项的值不变。
前台代码:
<asp:DropDownList ID="ddlModules" runat="server" OnSelectedIndexChanged="ddlModules_SelectedIndexChanged"> </asp:DropDownList>
后台代码
protected void ddlModules_SelectedIndexChanged(object sender, EventArgs e) { string text = this.ddlModules.SelectedItem.Text; string value = this.ddlModules.SelectedItem.Value; }
获取到的text始终是第一项的值。
已验证内容:
通过写死的方式绑定dropdownlist的值,切换选项时,选择项的值变化。
前台代码:
<asp:DropDownList ID="DropDownList2" runat="server" OnTextChanged="DropDownList2_SelectedIndexChanged"> <asp:ListItem>全部</asp:ListItem> <asp:ListItem>咨询</asp:ListItem> <asp:ListItem>论坛</asp:ListItem> </asp:DropDownList>
切换时,selected属性会加在当前选择项上。
<select name="ctl00$ContentPlaceHolder1$DropDownList2" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$DropDownList2\',\'\')', 0)" id="ContentPlaceHolder1_DropDownList2" class="valid"> <option value="全部">全部</option> <option selected="selected" value="咨询">咨询</option> <option value="论坛">论坛</option> </select>
不明白,请求指导。
亲们,问题现以得到解决。谢谢大家的支持!
以上描述时,切换选项时,选择项的值不变,不变的值始终是第一项的值。原因是每次点击button按钮时,dropdownlist要重新加载一次数据。而这一过程在按钮点击事件之前执行,结果就是button的点击事件中获取到的值始终时第一个选项的值。
解决方案很简单,在pageload中加ispostback判断。
附:IsPostBack标志:当前请求是否第一次打开。
以下奉上完整代码:
.aspx页
<form id="form1" runat="server"> <div> <asp:DropDownList ID="DropDownList1" runat="server"></asp:DropDownList> </div> <div> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" style="height: 32px" /> </div> </form>
.aspx.cs
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataTable dt = GetDataTable(); DropDownList1.DataSource = dt; //UserCode,UserName DropDownList1.DataValueField = "UserCode"; DropDownList1.DataTextField = "UserName"; DropDownList1.DataBind(); } } private DataTable GetDataTable() { //string connectionString = ConfigurationManager.ConnectionStrings["sql"].ConnectionString; string cmdText = "select UserCode,UserName from DD_UserInfo"; DataSet ds = SQLHelper.JKGetDataSet(cmdText, CommandType.Text); DataTable dt = null; if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { dt = ds.Tables[0]; } return dt; } protected void Button1_Click(object sender, EventArgs e) { string txt = DropDownList1.SelectedItem.Text; string val = DropDownList1.SelectedItem.Value; }
问题解决了,真的是非常感谢!!!!!!!!!!!!!!
<asp:DropDownList ID="ddlModules" runat="server" OnSelectedIndexChanged="ddlModules_SelectedIndexChanged"> </asp:DropDownList>
在这里面加上一个autopostback=true应该是的
几年不写webform了,有个属性就是允许回调的。
谢谢!这个试过了,不行
前台都一模一样。后台绑定的是DataTable的数据,感觉就这是最主要的差别
DataTable dt = GetModulesDataTable(); ddlModules.DataSource = dt; ddlModules.DataTextField = "ModuleName"; ddlModules.DataValueField = "TableName"; ddlModules.DataBind();
楼上正解.