我正在尝试修复Web应用程序中的错误,该错误会动态创建附加了事件的按钮。我正在处理从for循环内部调用的man函数。从研究中我已经做到这种分配事件的方式应该有效,但事实并非如此。实际上,点击该按钮会因某种原因消失。我是否错误地指定了动态事件,还是会出现其他完全错误的事情? "驱动程序"变量是在里面创建按钮的面板。
public void generateDriver(string name, string route, string id)
{
Debug.WriteLine("A driver has been created!");
Literal driverLit = new Literal();
driverLit.Text += "<div class='routeTitle'>";
driverLit.Text += "<input type='text' id='hiddenID' text='" + id + "' hidden />";
driverLit.Text += name + "<br>";
driverLit.Text += route + "<br>";
Button newButton = new Button();
newButton.Text = "Remove";
newButton.ID = id;
newButton.Click += new EventHandler(RemoveDriver);
newButton.CssClass = "btn btn-danger";
drivers.Controls.Add(driverLit);
drivers.Controls.Add(newButton);
drivers.Controls.Add(new Literal
{
Text = "</div>"
});
}
public void RemoveDriver(object sender, EventArgs e)
{
Debug.WriteLine("An event has been triggered!");
Button removeBtn = (Button)sender;
string id = removeBtn.ID;
string querystring = Request.QueryString["id"].ToString();
List<string> routes = querystring.Split('-').ToList();
routes.Remove(id);
string newQueryString = string.Join("-", routes);
Response.Redirect("/Orders.aspx?id=" + newQueryString);
}
感谢您的帮助。
答案 0 :(得分:0)
您必须在处理事件之前重新创建每个页面加载的动态控件,或者事件不会拥有所有者。这应该在加载之前在Initialization事件(页面的OnInit
事件处理程序)中完成。