【问题标题】:OnClick event firing but not visibly present in the .aspxOnClick 事件触发但在 .aspx 中不可见
【发布时间】:2019-12-24 09:01:29
【问题描述】:

我有这两个带有以下代码的按钮

<div class="row">
<div class="col-xs-6 text-right">
<asp:Button ID="btnAuthorize" runat="server" CssClass="btn btn-primary btn-sm" Text="Authorise" />
</div>

<div class="col-xs-6 text-left">
 <asp:Button ID="btnReject" runat="server" OnClick="btnReject_Click" CssClass="btn btn-primary btn-sm btn-danger" Text="Reject" />
</div>
</div>

在 .vb 文件中我有这些方法。

Protected Sub btnReject_Click(sender As Object, e As EventArgs)
 notify("Succesfully Rejected", "success")
End Sub

Protected Sub btnAuthorize_Click(sender As Object, e As EventArgs) Handles btnAuthorize.Click
  notify("Succesfully Authorized", "success")
End Sub

现在两个按钮都按预期工作,但 .aspx 页面中的 btnAuthorize 上没有 OnClick 事件
当我在 .aspx 页面中看不到 OnClick="btnAuthorize_Click" 时,为什么 btnAuthorize 会触发 btnAuthorize_Click

【问题讨论】:

  • 也许您错误地从 HTML 标记端删除了该方法。由于控件会产生服务器端影响,因此即使您从 UI 部分删除标记也不会影响。这仍然是一个谜,MSDN 没有说明为什么会发生这种情况。现在,如果您在 HTML 页面中为 btnAuthorize 编写 OnClick 方法并生成其 OnClick 事件,则此新事件将覆盖您的 btnAuthorize_Click 并显示为 btnAuthorize_Click1()

标签: asp.net vb.net webforms


【解决方案1】:

在这两种情况下,您都不需要也不想添加 onclick = 标签。事实上,该标签将首先运行本地 JavaScript 代码,然后运行您的服务器端代码。

但是,语法错误,甚至无法在您的网站上运行 - 至少不应该。

对于 asp.net 按钮?

标签名为 OnClientClick="MyJavaFunctionName()"

注意上面的正确格式是JS函数名后跟“()”

如果您从工具箱中放入 HTML 控件,那么这些控件根本不会调用 vb.net 服务器端代码,因此您可以使用:

        <input id="Button3" type="button" onclick="MyHello()" value="button" /></form>

所以标签

OnClick="btnReject_Click" 

是错误的,不是必需的。事实上,如果您运行该页面,如果您使用 Visual Studio 中的本地 II 服务器,您应该会收到错误消息。而且其实onClick是错的,需要是onclick(全小写)。

所以,它看起来曾经是一个非 ASP.net 控件,也许你剪切 + 粘贴,或编辑了标记。无论哪种方式,它都是错误的语法,如果您设法获得正确的语法,则该标记是 OnClientClick,并且 JavaScript 函数名称必须在引号下跟一组 ()。

大多数 asp.net 控件都不允许 OnClick。

因此,删除该标签 - 它的格式不正确,如果您尝试运行该页面,IIS Web 服务器可能会出现错误。

对于任何 asp.net 按钮?当您从工具箱拖放或在编辑器中剪切 + 粘贴标记时,会自动为您连接一个事件存根,您不需要任何标签来运行服务器端按钮单击事件。您不使用带有 asp.net 控件的标记标签连接服务器端事件。

如果您确实使用 OnClientClick 标记,则本地浏览器 JavaScript 将首先运行,然后您的服务器端 vb.net 代码将运行(如果您在 vb 编辑器中的该按钮的表单单击事件中有任何代码(服务器侧代码)。

如果您确实想运行一些本地 JavaScript,那么您的按钮将如下所示:

<div class="col-xs-6 text-left">
 <asp:Button ID="btnReject" runat="server" OnClientClick="MyHello()" CssClass="btn btn-primary btn-sm btn-danger" Text="Reject" />
</div>
</div>

    <script>
        function MyHello() {
            alert("my hello run client side");
        }
    </script>

如果您执行上述操作,则会弹出一个对话框 hello 框,然后(如果有)服务器 vb.net 端的代码将运行。

【讨论】:

    【解决方案2】:

    感谢大家的帮助。

    我遇到了 Handles Clause (Visual Basic) 文档 here,我发现我的 .vb 文件中有一个 handles 子句按钮的方法,即使在 .aspx 文件中没有 OnClick="btnAuthorize_Click" 调用,也会触发 Onclick 事件。

    所以.vb 文件中的这个Handles btnAuthorize.Click 会触发事件,而btnReject_Click 没有句柄子句,因为它已经在.aspx 文件中被调用了。 p>

    Protected Sub btnAuthorize_Click(sender As Object, e As EventArgs) Handles btnAuthorize.Click
      notify("Succesfully Authorized", "success")
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 2010-10-21
      • 1970-01-01
      • 2014-10-09
      • 2014-09-18
      • 2012-01-24
      相关资源
      最近更新 更多