【问题标题】:dropdownlist selected value is not getting selected下拉列表选择的值没有被选中
【发布时间】:2016-01-20 14:22:27
【问题描述】:

这里发生的事情是,每当我从dropdownlist 中选择一个值时,页面就会得到回发,然后它又回到了“--- Select ---”强>。

我尝试了链接here,但没有成功

if (DtMainA.Rows.Count > 0)
{
    DataTable DtGoodType = new DataTable();
    ObjPriDaAdp          = new OracleDataAdapter("select mkey, vehicle_no from XXCUS.XXGID_AUDIT_ENTRY where mkey= '" + Hid_MKey.Value + "'", ObjPriCon);
    ObjPriDaAdp.Fill(DtGoodType);

    if (DtGoodType.Rows.Count > 0)
    {
        cmdVehicleNo.DataTextField = "vehicle_no";
        cmdVehicleNo.DataValueField = "mkey";
        cmdVehicleNo.DataSource = DtGoodType;
        cmdVehicleNo.DataBind();
        cmdVehicleNo.Items.Insert(0, new ListItem("--- Select ---", "0"));
   }
}

另见我的 aspx:-

<asp:DropDownList ID="cmdVehicleNo" runat="server" Style="width: 50%" AutoPostBack="true"
     OnSelectedIndexChanged="cmdVehicleNo_SelectedIndexChanged">
    <asp:ListItem Value="0" Selected="True" >--- Select ---</asp:ListItem>
</asp:DropDownList>

更新

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        if (ObjPriCon.State == System.Data.ConnectionState.Closed)
        {
            ObjPriCon.Open();
        }
        if (hidAttachid.Value == "")
        {
            hidAttachid.Value = "0";
        }

        ObjPriCmd = new OracleCommand("Select count(MKEY)cntrow from XXCUS.XXGID_AUDIT_ENTRY", ObjPriCon);
        FunFillData();
        ObjPriCon.Close();
        fillProject();
        fillGoodType();
    }
}


protected void CmbProject_SelectedIndexChanged(object sender, EventArgs e)
{
    //  ClientScript.RegisterStartupScript(this.GetType(), "SuccessScript", "window.location.href='FrmCentral_Monitoring_Entry_OUT.aspx?userid=" + Hid_userid.Value + "';", true);
    if (CmbProject.SelectedIndex > 0)
    {
        DtCombo = FillComboBox("select mkey, vehicle_no from XXCUS.XXGID_AUDIT_ENTRY where time_out IS NULL and Project_id='" + CmbProject.SelectedValue + "'");

        cmdVehicleNo.DataTextField = "vehicle_no";
        cmdVehicleNo.DataValueField = "mkey";
        cmdVehicleNo.DataSource = DtCombo;
        cmdVehicleNo.DataBind();
        cmdVehicleNo.Items.Insert(0, new ListItem("--- Select ---", "0"));
        if (DtCombo.Rows.Count == 1)
        {
            cmdVehicleNo.SelectedIndex = 1;
        }
        DtCombo.Clear();
    }
    Funclear();
}

【问题讨论】:

  • 您的 aspx 将 --- Select -- 显式设置为通过 Selected="True" 选择
  • @Übercoder:从 aspx 中删除 true 后。它仍然无法按预期工作
  • 可能你的问题是postback。还要检查这个问题:stackoverflow.com/questions/34544500/…
  • @user2946329:是的,我的问题是回发,它将值重置为默认值。在您提供的链接中,我很困惑我在做什么?我需要在页面加载中再次调用整个数据表吗
  • 强烈怀疑您在 Page_Load 上缺少!IsPostBack 条件。所以它每次都重新绑定下拉菜单。

标签: c# asp.net drop-down-menu


【解决方案1】:

当前代码的一个非常明显的问题是,每当您从下拉列表中选择任何项目时,它都会执行 PostBack 并触发 CmbProject_SelectedIndexChanged 事件。在这种情况下,我不知道您为什么再次填充下拉列表。理想情况下,您应该在初始页面加载时只绑定一次下拉列表,如下所示:-

if (!IsPostBack)
{
   BindDropDownList(); //Call this method
}

//Write a separate method to bind the dropdown
private void BindDropDownList()
{
    DataTable DtGoodType = new DataTable();
    ObjPriDaAdp = new OracleDataAdapter("select mkey, vehicle_no from XXCUS.XXGID_AUDIT_ENTRY where mkey= '" + Hid_MKey.Value + "'", ObjPriCon);
    ObjPriDaAdp.Fill(DtGoodType);

    if (DtGoodType.Rows.Count > 0)
    {
       cmdVehicleNo.DataTextField = "vehicle_no";
       cmdVehicleNo.DataValueField = "mkey";
       cmdVehicleNo.DataSource = DtGoodType;
       cmdVehicleNo.DataBind();
       cmdVehicleNo.Items.Insert(0, new ListItem("--- Select ---", "0"));
   }
}

最后,在选定的选项更改事件中,您应该只编写用户更改选择时要执行的操作的逻辑:-

protected void CmbProject_SelectedIndexChanged(object sender, EventArgs e)
{
   //Do Stuffs
}

【讨论】:

  • :- 实际上,当selectingindexchanged 我评论了一行,即cmdVehicleNo.SelectedValue = DtGoodType.Rows[0]["mkey"].ToString(); 正在选择值时。但它在 page_load 上发生了变化,我希望手动选择这是代码:- if (Hid_MKey.Value != "0") { //cmdVehicleNo.SelectedValue = DtGoodType.Rows[0]["mkey"].ToString(); }
  • @coder - CmbProject_SelectedIndexChanged 将在用户在下拉列表中选择某个值并且您想在此事件中设置某些内容时触发?这真的很奇怪。你到底想做什么?
  • 见,cmdVehicleNo page_load 我想要默认值,它正在工作。但是当我执行CmbProject_SelectedIndexChanged 时,我希望首先将cmdVehicleNo 设为默认值。之后我可以从cmdVehicleNo 中进行选择。当时选择索引更改不起作用
  • @coder- 所以基本上你希望你的用户应该选择一些值两次?
  • 我想要,只要下拉列表加载了一些值。首先它应该显示默认值。并且在选择了某个值之后,该值应该是它们的值。目前该值未被选中。
猜你喜欢
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多