【问题标题】:DropDownList lose index after PostBackPostBack 后 DropDownList 丢失索引
【发布时间】:2013-07-18 12:48:13
【问题描述】:

我有一个下拉列表,其中填充了来自 SQL 服务器的数据。

我在Page_Init() 事件中动态填充下拉列表。 根据值,选择一个 ListItem。

现在的问题是,当我在下拉列表中选择另一个项目时,回发后选择会重置为下拉列表中的第一个项目。

这是我的代码的基本版本,它不起作用:

        ArrayList AD_Group_Members = ActiveDirectory.GetMemberOfGroup("AD-Group");
        ArrayList ListMachines = SQLQuery.Read("Database", "SELECT idVM, RandomString, Computername, Owner, FROM VM ORDER BY Computername");

        for (int i = 0; i < ListMachines.Count; i++)
        {
            String RandomString = ((Hashtable)ListMachines[i])["RandomString"].ToString();
            String Owner = ((Hashtable)ListMachines[i])["Owner"].ToString();
            DropDownList DropDownList_Owner = new DropDownList();
            DropDownList_Owner.ID = "DropDownList_Owner_" + RandomString;
            DropDownList_Owner.Width = Unit.Percentage(95);
            DropDownList_Owner.AutoPostBack = true;
            DropDownList_Owner.EnableViewState = true;
            DropDownList_Owner.SelectedIndexChanged += DropDownList_Owner_SelectedIndexChanged;
            Div_Test.Controls.Add(DropDownList_Owner);
            for (int y = 0; y < AD_Group_Members.Count; y++)
            {
                ListItem ListItem = new ListItem();
                ListItem.Value = Owner;
                ListItem.Text = ((Hashtable)AD_Group_Members[y])["GivenName"].ToString() + " " + ((Hashtable)AD_Group_Members[y])["Surname"].ToString();
                if (((Hashtable)AD_Group_Members[y])["Username"].ToString().Equals(Owner))
                {
                    ListItem.Selected = true;
                }
                DropDownList_Owner.Items.Add(ListItem);
            }
        }

我的代码中的问题在哪里,除了示例之外它不起作用。 提前致谢

【问题讨论】:

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


    【解决方案1】:

    我认为您应该为下拉菜单设置唯一值。此外,由于您在数据值字段中有重复值,因此问题正在发生。它正在寻找第一个匹配项并选择它。您可以尝试制造您可以唯一识别的值。如下所示:

    COLUMN_NAME  DATA_TYPE
    a            a_decimal
    b            b_decimal
    c            c_decimal
    d            d_int
    e            e_int
    f            f_varchar
    g            g_varchar
    h            h_varchar
    i            i_varchar
    j            j_varchar
    

    Check out this Useful Source!!! 我希望它有帮助!!!仔细查看已接受答案部分中的那些 cmets !!!

    在处理动态生成的 Web 控件时,还要避免使用 SelectedIndex_Changed() 函数。在 Page_Init() 或 Page_PreInit() 下绑定 DropdownList。如果你想在 DropDownlist Selection Check out this 上执行一些功能!确定触发的 WebControl ID,然后在 Page_PreInit() 或 Page_Init() 中执行唯一的函数。

    【讨论】:

      【解决方案2】:

      您在Page_Init() 中填写了下拉列表,该下拉列表在每次回发时都会被调用并重新填写您的下拉列表,因此会丢失 selectedindex。因此您必须在!ispostback 块中填写下拉列表

      if (!IsPostBack)
      {
         //fill your dropdown here
      }
      

      【讨论】:

        【解决方案3】:

        在这种情况下,您必须在页面加载时填充您的下拉列表。 因为在每次回帖时,您的 ddl 都会再次填充并丢失其选定的索引。

        if (!IsPostBack)
        {
            //PopulateYourDDL here
        }
        

        【讨论】:

        • 好的,这对我有帮助,但现在我有以下问题:在我将选定的项目“用户 A”更改为“用户 B”后,在 SelectedIndexChanged 事件中仍然是“用户 A”作为 SelectedValue
        • 引用您的填充函数并从您的问题中删除不必要的代码。
        • 我现在在我的真实代码中尝试过,现在出现了问题,在选定项目的更改后,所有项目都消失了,并且 SelectedIndexChanged 事件没有触发。请求澄清或建议改进。
        • 将您的 selectedIndex 存储在隐藏字段中,并在回发时重新选择该选定索引。 Or 调试并查看它在哪里选择值 A
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-14
        • 1970-01-01
        • 2014-05-03
        • 1970-01-01
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多