无法从数据库绑定的下拉列表中获取值

Cannot get value from database-bound dropdownlist

我在 VS2017 中使用 asp.net 4.5 网络表单并使用下拉列表获取值 从数据库中尝试获取值,但它一直只给我最高值,所以我正在寻求帮助。

我绑定值的方式是这样的:

protected void Page_Load(object sender, EventArgs e)
{
    var db = new dbContext();
    var CustItem = db.customer.ToList();

    customerDropDownList.DataSource = CustItem;
    customerDropDownList.DataTextField = "cust";
    customerDropDownList.DataValueField = "cust";
    customerDropDownList.DataBind();
}

它运行良好,获取客户 table 中的所有列表,并在 id 的 cust 列中填充数据:customerDropDownList。 然后我尝试通过 testBtn 从 customerDropDownList 获取价值 附加并使用了 testLbl

protected void testBtn_Click(object sender, EventArgs e)
{
    testLbl.Text = customerDropDownList.SelectedValue;
}

并且它总是只选择顶部元素。

我怀疑这与 asp.net 的生命周期有关,正在研究中 但找不到解决这个问题的明确答案。

谁能帮我解决这个问题?

可能是因为您在每次加载页面时都重置了下拉列表。第一次尝试只设置 ddlist。

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
        var db = new dbContext();
        var CustItem = db.customer.ToList();

        customerDropDownList.DataSource = CustItem;
        customerDropDownList.DataTextField = "cust";
        customerDropDownList.DataValueField = "cust";
        customerDropDownList.DataBind();
    }
}

您在页面加载事件中缺少 Page.IsPostBack

有关 Ispostback 的更多信息 here

使用您的代码,您是否没有注意到您的下拉列表在点击时翻了一番?

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
        var db = new dbContext();
        var CustItem = db.customer.ToList();

        customerDropDownList.DataSource = CustItem;
        customerDropDownList.DataTextField = "cust";
        customerDropDownList.DataValueField = "cust";
        customerDropDownList.DataBind();
    }
}

确保只加载一次下拉列表。单击按钮时也会调用您的页面加载。

保持一个断点并玩转!!祝你好运