首页 新闻 会员 周边

asp.net dropdownlist控件切换选项时,选项值不变

0
悬赏园豆:10 [已解决问题] 解决于 2018-12-16 22:07

问题:通过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>

 

不明白,请求指导。

cxiaoluab的主页 cxiaoluab | 初学一级 | 园豆:26
提问于:2017-05-26 21:39
< >
分享
最佳答案
0

亲们,问题现以得到解决。谢谢大家的支持!

以上描述时,切换选项时,选择项的值不变,不变的值始终是第一项的值。原因是每次点击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;
        }
cxiaoluab | 初学一级 |园豆:26 | 2017-06-11 21:02

问题解决了,真的是非常感谢!!!!!!!!!!!!!!

EndlessShw | 园豆:200 (初学一级) | 2021-06-05 20:58
其他回答(2)
0

<asp:DropDownList ID="ddlModules" runat="server" OnSelectedIndexChanged="ddlModules_SelectedIndexChanged"> </asp:DropDownList>

在这里面加上一个autopostback=true应该是的

几年不写webform了,有个属性就是允许回调的。

收获园豆:5
Emrys5 | 园豆:223 (菜鸟二级) | 2017-05-26 21:52

谢谢!这个试过了,不行

前台都一模一样。后台绑定的是DataTable的数据,感觉就这是最主要的差别

            DataTable dt = GetModulesDataTable();
            ddlModules.DataSource = dt;
            ddlModules.DataTextField = "ModuleName";
            ddlModules.DataValueField = "TableName";
            ddlModules.DataBind();
支持(0) 反对(0) cxiaoluab | 园豆:26 (初学一级) | 2017-05-27 15:07
0

楼上正解.

收获园豆:5
筱浬 | 园豆:601 (小虾三级) | 2017-05-27 09:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册