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

2019-01-02 20:28发布

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

 

不明白,请求指导。

3条回答
不流泪的眼
2楼-- · 2019-01-02 20:48

楼上正解.

查看更多
听够珍惜
3楼-- · 2019-01-02 21:01

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

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

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

查看更多
怪性笑人.
4楼-- · 2019-01-02 21:02

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

以上描述时,切换选项时,选择项的值不变,不变的值始终是第一项的值。原因是每次点击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;
        }
查看更多
登录 后发表回答