代码之家  ›  专栏  ›  技术社区  ›  ASP.NET Help Account

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

  •  2
  • ASP.NET Help Account  · 技术社区  · 6 年前

    我正在尝试修复web应用程序中的一个错误,该应用程序动态创建带有事件的按钮。我正在处理这个man函数,它是从for循环内部调用的。根据我所做的研究,这种分配活动的方式应该有效,但实际上不行。事实上,由于某种原因,点击按钮就会消失。我是不是把动态事件分配错了,还是会有其他完全错误的事情发生?“drivers”变量是按钮在其内部创建的面板。

     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 回复  |  直到 6 年前
        1
  •  0
  •   ps2goat    6 年前

    在处理事件之前,必须在每次页面加载时重新创建动态控件,否则事件将没有所有者。这应该在初始化事件(页面的 OnInit 事件处理程序),然后再加载。