C# 选择Indexchanged donds´;无法在动态下拉列表中工作

C# 选择Indexchanged donds´;无法在动态下拉列表中工作,c#,asp.net,webforms,C#,Asp.net,Webforms,我正在使用C#使用ASP.NET WebForms。我有一个按钮,当点击它创建一个下拉列表。此列表是在“createlist”方法中创建的,带有id和items等参数。我还添加了一个SelectedIndexChanged事件处理程序 列表创建成功,但当我在3个选项之间切换时,处理程序不会启动,因为控制台从不打印消息“CHANGE” 这是我的密码: namespace web { public partial class Default : System.Web.UI.Page

我正在使用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");
        }
    }
}
命名空间web
{
公共部分类默认值:System.Web.UI.Page
{
List lstDivs=新列表();
受保护的无效btn_单击(对象发送方,事件参数e)
{
控制结果=FindControl(“结果”);
lstDivs.添加(“一”);
lstDivs.添加(“两个”);
lstDivs.添加(“三”);
DropDownList lstTipo=createList(“lstTipos”,lstDivs);
结果:对照组。添加(lstTipo);
}        
public DropDownList createList(字符串id,列表lstStr)
{
DropDownList lst=新的DropDownList();
添加(“runat”、“server”);
lst.ID=ID+“”+Variables.numDiv;
lst.SelectedIndexChanged+=新事件处理程序(更改);
lst.AutoPostBack=true;
添加(新列表项(“选择…”,选择…”);
对于(int i=0;i
创建并向用户显示动态控件后,必须在回发时重新创建该控件,才能触发其事件。事件的执行由控件本身触发,因此,如果没有控件,则没有人检测更改并调用
change
方法


您必须保留已创建下拉列表(隐藏字段、视图状态、会话、数据库等)的事实,并在
Page\u Load

中再次创建该下拉列表,因为它是动态创建的,所以我不确定回发上是否存在您的控件。我发现这篇文章可能会有所帮助:

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