服务器端创建的按钮不会触发点击事件

Posted

技术标签:

【中文标题】服务器端创建的按钮不会触发点击事件【英文标题】:Sever side created button doesn't fire click event 【发布时间】:2018-08-28 03:29:13 【问题描述】:

按照ASP.NET/html: HTML button's onClick property inside ASP.NET (.cs)的示例答案

如果我在页面上正常添加按钮 html,则按钮 "Click Me!" 可以工作。如果我使用 ASP.NET VB.NET InnerHTML 将其添加到页面,则不会触发单击。有谁知道为什么?

下面是呈现 HTML 之后的内容。

下面是 ASP.NET VB.NET 代码:

strTbl1 = "<table style='text-align:Left;'><tr class='spaceUnder'>"
strTbl1 = strTbl1 + "<td style=''><button id='Button1' OnServerClick='Button1_OnClick' runat='server'>Click me!</button></td></tr>"
strTbl1 = strTbl1 + "</table>"
Task1Assignees.InnerHtml = strTbl1

我尝试过&lt;input type=button...asp:Button .. 等,但都没有注册点击事件。如果我尝试使用 asp 类型,我也会收到 javascript 错误。

更新:

服务器端函数

Protected Sub Button1_OnClick(ByVal sender As Object, ByVal e As EventArgs)
    MsgBox("hi")
End Sub

最终修复

所以使用来自Dynamic created Buttons VB.Net with Loop 的示例和下面接受的答案,我能够像这样修复我的代码

Page_Load(在 IsPostBack 检查之外)

 Task1Assignees.Controls.Clear()
 For j As Integer = 0 To System.Web.HttpContext.Current.Session("intAssignees") Step 1
        Dim btn As New Button
        btn.Text = "Mark Completed"
        btn.CssClass = "btn btn-success"
        btn.ID = "btnAssignee" & j
        AddHandler btn.Click, AddressOf Send
        Task1Assignees.Controls.Add(btn)
  Next

按钮创建

 System.Web.HttpContext.Current.Session("intAssignees") = ds1.Tables(0).Rows.Count

  Task1Assignees.Controls.Clear()
      For j As Integer = 0 To System.Web.HttpContext.Current.Session("intAssignees") Step 1
         Dim btn As New Button
         btn.Text = "Mark Completed"
         btn.Cssclass = "btn btn-success"
         btn.ID = "btnAssignee" & j
         AddHandler btn.Click, AddressOf Send
         Task1Assignees.Controls.Add(btn)
    Next

按钮功能

Sub Send()
    Response.Redirect("~\Home.aspx")
End Sub

【问题讨论】:

fyi...onclick 也不适用于所有场景 您不能通过在字符串中添加OnServerClickrunat=server 来创建动态按钮。您需要添加“真正的”控件。 【参考方案1】:

这行不通,但您可以创建服务器端 HTML 控件。

var table = new HtmlTable();
var row = new HtmlTableRow();
var cell = new HtmlTableCell();
var btn = new LinkButton();

btn.Text = "Click Me!";
btn.Click += Button1_OnClick;

cell.Controls.Add(btn);
row.Cells.Add(cell);
table.Rows.Add(row);
Task1Assignees.Controls.Add(table);

【讨论】:

在 vb.net 中查看时没有 btn.Click 事件。只有onclientclick。这就是为什么我认为我不能使用它。 对不起,我错过了 VB.NET 部分,我认为你可以这样做:AddHandler btn.Click, AddressOf Button1_OnClick 我在Page_load 中使用AddHandler sB.Click, AddressOf Button1_OnClick 执行了以下sB.ID = "Button1" sB.Text = "Mark Completed" cell.Controls.Add(sB) row.Cells.Add(cell) table.Rows.Add(row) Task1Assignees.Controls.Add(table),并且点击事件没有触发:/。没有显示 MsgBox 你使用的是原生 MsgBox 吗?这在网络上是行不通的。 我只是将MsgBox 命令与调试点放在那里。该事件不会触发,因为未达到调试点。【参考方案2】:

1) 尝试将该按钮更改为 ASP:Button 对象,而不是 HTML 按钮。

2) 如果这不起作用,请将视图从代码更改为设计视图,然后双击按钮,Visual Studio 应该会自动创建方法(或者在您的情况下,将您定向到将执行代码的方法点击按钮。)

3) 如果这不起作用,请从工具栏中拖放一个按钮,然后双击并重复第 2 步。

【讨论】:

只有第 3 步可以工作,但不是我需要的。我需要根据页面点击事件创建“x”数量的按钮,告诉我要创建多少。它们必须以编程方式创建,而不是“放入”设计视图中。我尝试过Public btn as new HtmlbuttonPublic btn as new Button,它们都是html 类型和asp 按钮类型

以上是关于服务器端创建的按钮不会触发点击事件的主要内容,如果未能解决你的问题,请参考以下文章

提交按钮不会触发服务器端代码

php怎么给按钮添加事件

移动端 点击返回按钮页面不刷新

从 html5 按钮 onclick 事件调用服务器端方法

如何js实现触屏点击事件

移动端网页特效:左右滑动开关