如何在 jQuery 调用的 CodeBehind 中执行事件?

Posted

技术标签:

【中文标题】如何在 jQuery 调用的 CodeBehind 中执行事件?【英文标题】:How to execute an event in CodeBehind being called by jQuery? 【发布时间】:2020-04-15 04:45:32 【问题描述】:

我在 Aspx 中有这段代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="WebSite.View.Index" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script src="Scripts/jquery-3.4.1.min.js"></script>
    <title>Projeto para Testes</title>
</head>
<body>
    <form id="form1" runat="server">
        <div id="dvEventos" class="dvEventos">
            <h1>Apenas um teste</h1>
            <asp:Button ID="btnEventoCsharp" CssClass="btnEventoCsharp" Text="Evento C#" OnClick="btnEventoCsharp_Click" runat="server" />
            <asp:Button ID="btnEventoCsharpByJS" CssClass="btnEventoCsharpByJS" Text="Evento C# by JS" OnClick="btnEventoCsharpByJS_Click" runat="server"  />
            <button id="btnEventoJqueryClick" class="btnEventoJqueryClick">Evento C# by Jquery</button>
            <button id="btnEventoJquery" class="btnEventoJquery">Evento Jquery</button>
        </div>
    </form>
</body>
<script>
    $(document).ready(function () 
        CarregaEventosIndex();
    );

    function CarregaEventosIndex() 
        $('.btnEventoJquery').off('click').on('click', function () 
            alert('Event click by Jquery');
        );

        $('.btnEventoJqueryClick').off('click').on('click', function () 
            $("input[id*=btnEventoCsharpByJS]").click();
        );
    
</script>
</html>

我的文件CodeBehind

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebSite.View

    public partial class Index : System.Web.UI.Page
    
        protected void Page_Load(object sender, EventArgs e)
        

        

        protected void MetodoSemParametroChamadoEventosDiferentes()
        
            string passeiAqui = "sem parametro";
            string evento = passeiAqui;
        

        /// Evento de Teste
        protected void btnEventoCsharpByJS_Click(object sender, EventArgs e)
        
            MetodoSemParametroChamadoEventosDiferentes();
        
    

我正在使用 Webforms,我需要通过 jQuery 调用 CodeBehind 事件,在本例中使用此 btnEventoJqueryClick 按钮。但是,如果我使用此代码 $ ("input [id * = btnEventoCsharpByJS]"),则有一个。点击 ();通过浏览器控制台,在CodeBehind中使用断点,我意识到事件被调用了,但是点击按钮并没有调用事件。我究竟做错了什么?或者,如何通过 jQuery 以不同的方式调用 CodeBehind 事件?

【问题讨论】:

要检查的是网络选项卡。当您单击按钮时,查看是否有任何网络流量正在发送到您的服务器并验证响应。比较点击和控制台生成的点击之间的网络流量。另一个可能的原因是 ID 冲突。确保页面或母版页上没有任何其他 ID 冲突的按钮。祝你好运! 你试试这个$("#&lt;%=btnEventoCsharpByJS.ClientID %&gt;").click();而不是$("input[id*=btnEventoCsharpByJS]").click(); 【参考方案1】:

您可以使用ClientID 获取由 ASP.NET 生成的 HTML 标记的控件 ID。

$("input[id*=btnEventoCsharpByJS]").click();

应该是:

$("#<%=btnEventoCsharpByJS.ClientID %>").click(); 

这样就可以触发 CodeBehind 方法btnEventoCsharpByJS_Click

【讨论】:

以上是关于如何在 jQuery 调用的 CodeBehind 中执行事件?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET CodeBehind 无法识别 TinyMCE 文本区域更改

如何在 Rider 中创建 XAML + CodeBehind 对?

判断checkbox选中状态

bootstrap modal popup c# codebehind

如何在listview - WPF MVVM上拖放后更新codeBehind中的ObservableCollection

如何在codebehind的pageload事件被触发之前,在页面加载时将一个会话存储值传递到文本框中?