我使用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");
}
}
}
答案 0 :(得分:2)
创建动态控件并向用户显示后,必须在回发时重新创建动态控件以触发其事件。控件本身会触发事件的执行,因此,如果没有控件 - 没有人可以检测到更改并调用您的change
方法。
您必须坚持创建下拉列表(隐藏字段,ViewState,会话,数据库......)并在Page_Load
中再次创建它。
答案 1 :(得分:1)
我不确定你的控件是否存在于回发中,因为它是动态创建的。我发现这篇文章可能会有所帮助: Dynamically Added DropDownlists Are Not Firing SelectedIndexChanged Event
另外,我认为你不需要将runat添加为属性。这应该自动完成。