ASP.NET动态生成的事件代码未运行

时间:2018-06-01 17:48:22

标签: c# asp.net events webforms

我正在尝试修复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);
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您必须在处理事件之前重新创建每个页面加载的动态控件,或者事件不会拥有所有者。这应该在加载之前在Initialization事件(页面的OnInit事件处理程序)中完成。