ASP.NET中如何获取动态创建按钮被点击时的动态设置ID
动态按钮点击事件获取ID的解决方案
我来给你捋捋怎么实现这个需求哈,其实核心就是在动态生成按钮的时候,给每个按钮绑定好点击事件,同时把对应的分类ID存好,这样点击时就能轻松拿到啦。
完整代码示例
首先,在页面加载的时候完成按钮的动态创建,还要记得绑定点击事件:
protected void Page_Load(object sender, EventArgs e) { // 划重点:这里不要加!IsPostBack判断! // 因为动态控件必须在每次回发时重建,不然点击事件会失效 MySqlConnection con = new MySqlConnection(connection); MySqlDataAdapter sda = new MySqlDataAdapter("SELECT * FROM category", con); DataTable dt = new DataTable(); sda.Fill(dt); foreach (DataRow row in dt.Rows) { Button categoryBtn = new Button(); // 给按钮设置唯一ID,用分类ID拼接,方便识别 categoryBtn.ID = "btnCategory_" + row["CategoryID"].ToString(); // 设置按钮显示的文本 categoryBtn.Text = row["CategoryName"].ToString(); // 把分类ID存到CommandArgument里,后续点击直接取更方便 categoryBtn.CommandArgument = row["CategoryID"].ToString(); // 绑定点击事件到我们要实现的btnCategoryClick方法 categoryBtn.Click += btnCategoryClick; // 把按钮加到你的Panel里 resPanel.Controls.Add(categoryBtn); // 加个换行让按钮排版更舒服 resPanel.Controls.Add(new LiteralControl("<br/>")); } }
接下来实现btnCategoryClick方法,就能拿到被点击按钮的ID或者分类ID了:
protected void btnCategoryClick(object sender, EventArgs e) { // 把触发事件的对象转成Button类型 Button clickedBtn = sender as Button; if (clickedBtn != null) { // 获取按钮本身的ID string buttonID = clickedBtn.ID; // 或者直接拿我们存在CommandArgument里的分类ID string categoryID = clickedBtn.CommandArgument; // 这里就可以用拿到的ID做你需要的操作啦,比如输出、查询数据等等 Response.Write($"被点击的按钮ID:{buttonID},对应的分类ID:{categoryID}"); } }
必看注意事项
一定要记住:动态创建的控件必须在每次页面回发时都重新创建,ASP.NET的页面生命周期决定了如果回发时控件不存在,就无法触发对应的点击事件。所以千万别加
!IsPostBack判断,或者把创建控件的逻辑移到Page_Init方法里,效果是一样的。
内容的提问来源于stack exchange,提问作者T Gabe
相关产品推荐
相关产品推荐

