SelectIndexChanged在动态下拉列表中不起作用

时间:2015-09-15 13:45:16

标签: c# asp.net webforms

我使用C#使用ASP.NET WebForms。点击它时我有一个按钮创建一个下拉列表。此列表在“createlist”方法中创建,其中包含id和items等参数。我还添加了一个SelectedIndexChanged事件处理程序。

列表已成功创建,但是当我在3个选项之间切换时,处理程序未触发,因为控制台从不打印消息“CHANGE”。

这是我的代码:

namespace web
{
    public partial class Default : System.Web.UI.Page
    {
        List<string> lstDivs = new List<string>();

        protected void btn_Click(object sender, EventArgs e)
        {
            Control results = FindControl("results");
            lstDivs.Add("One");
            lstDivs.Add("Two");
            lstDivs.Add("Three");
            DropDownList lstTipo = createList("lstTipos", lstDivs);
            results.Controls.Add(lstTipo);
        }        

        public DropDownList createList(string id, List<string> lstStr)
        {
            DropDownList lst = new DropDownList();
            lst.Attributes.Add("runat", "server");
            lst.ID = id + "" + Variables.numDiv;
            lst.SelectedIndexChanged += new EventHandler(change);
            lst.AutoPostBack = true;

            lst.Items.Add(new ListItem("Select...", "Select..."));
            for (int i = 0; i < lstStr.Count; i++)
            {
                lst.Items.Add(new ListItem(lstStr[i], lstStr[i]));
                lst.Items[i].Attributes.Add("id", lst.ID + "" + i.ToString());
            }

            return lst;
        }

        protected void change(object sender, EventArgs e)
        {
            Debug.Write("CHANGE\r\n");
        }
    }
}

2 个答案:

答案 0 :(得分:2)

创建动态控件并向用户显示后,必须在回发时重新创建动态控件以触发其事件。控件本身会触发事件的执行,因此,如果没有控件 - 没有人可以检测到更改并调用您的change方法。

您必须坚持创建下拉列表(隐藏字段,ViewState,会话,数据库......)并在Page_Load中再次创建它。

答案 1 :(得分:1)

我不确定你的控件是否存在于回发中,因为它是动态创建的。我发现这篇文章可能会有所帮助: Dynamically Added DropDownlists Are Not Firing SelectedIndexChanged Event

另外,我认为你不需要将runat添加为属性。这应该自动完成。