Javascript 使用“调用C”方法;WebMethod“;“返回”;“未定义”;

Javascript 使用“调用C”方法;WebMethod“;“返回”;“未定义”;,javascript,c#,jquery,ajax,webmethod,Javascript,C#,Jquery,Ajax,Webmethod,首先,我知道有很多问题与此类似,但没有一个对我的特殊情况有帮助(我可能只需要澄清,我不想打开一个旧的思路) 我正在创建一个应用程序,需要在jQuery函数中调用一个C#方法。我之所以需要这样做,是因为我需要使用两个特定参数对数据库执行查询 Javascript: $(".button").click(function(){ var dataId = $(this).attr("data-Id"); var s = PageMethods.returnStr(dataId, on

首先,我知道有很多问题与此类似,但没有一个对我的特殊情况有帮助(我可能只需要澄清,我不想打开一个旧的思路)

我正在创建一个应用程序,需要在jQuery函数中调用一个C#方法。我之所以需要这样做,是因为我需要使用两个特定参数对数据库执行查询

Javascript:

$(".button").click(function(){
    var dataId = $(this).attr("data-Id");

    var s = PageMethods.returnStr(dataId, onSuccess, onError);
    function onSuccess(result){
        alert(s);
    }
    function onError(result){
        alert("error");
    }
});
C#:

返回的字符串未定义。如果我使用alert(result),我只会得到页面的语法


我还尝试使用以下方法引用c#变量:

C#

JavaScript:

alert('<%=s%>');

非常感谢您的任何建议

你不能按你的建议去做。Javascript在web浏览器中运行。C#在服务器上运行。您不能在浏览器中运行C#代码

使用
警报(“”)之所以有效,是因为它在发送到客户端之前在服务器上进行了评估

您有两个选择:

  • 制作一个纯Javascript函数,它可以满足您的需要
  • 使用ASP控件中的普通web窗体事件处理程序(即按钮的OnClick方法)
  • 向服务器回拨AJAX以执行所需操作
  • 我看你试过3次,但做得不对。“default.aspx/returnStr”的URL没有任何意义。它不会在default.aspx.cs内自动运行
    returnStr
    方法

    你最好使用#2。这将是最简单的

    更新:
    另一种选择是使用asp按钮,如#2,然后在OnClick方法中使用,这将在回发完成后将Javascript注入页面。在您注入的javascript中,您可以运行代码打开弹出窗口。

    您不能执行您的建议。Javascript在web浏览器中运行。C#在服务器上运行。您不能在浏览器中运行C#代码

    使用
    警报(“”)之所以有效,是因为它在发送到客户端之前在服务器上进行了评估

    您有两个选择:

  • 制作一个纯Javascript函数,它可以满足您的需要
  • 使用ASP控件中的普通web窗体事件处理程序(即按钮的OnClick方法)
  • 向服务器回拨AJAX以执行所需操作
  • 我看你试过3次,但做得不对。“default.aspx/returnStr”的URL没有任何意义。它不会在default.aspx.cs内自动运行
    returnStr
    方法

    你最好使用#2。这将是最简单的

    更新:
    另一种选择是使用asp按钮,如#2,然后在OnClick方法中使用,这将在回发完成后将Javascript注入页面。在您注入的javascript中,您可以运行代码打开弹出窗口。

    您如何调用C#方法?JavaScript是沙盒的,所以不可能。我不确定我是否100%理解你的意思。我调用的函数类似于tihs:var s=PageMethods.populateInstructions(dataToggle、dataId、onSuccess、onError);显示定义
    PageMethods
    的代码。我的印象是,添加'EnablePageMethods=“true”'允许我使用'PageMethods.{C#functionName}'。我是否遗漏了一些重要信息?您的AJAX正在工作,问题在于您正在使用
    alert()
    进行调试。改用
    console.log(result)
    你是如何调用C#方法的?JavaScript是沙盒的,所以不可能。我不确定我是否100%理解你的意思。我调用的函数类似于tihs:var s=PageMethods.populateInstructions(dataToggle、dataId、onSuccess、onError);显示定义
    PageMethods
    的代码。我的印象是,添加'EnablePageMethods=“true”'允许我使用'PageMethods.{C#functionName}'。我是否遗漏了一些重要信息?您的AJAX正在工作,问题在于您正在使用
    alert()
    进行调试。使用
    console.log(result)
    而不是问题在于,我正在创建一个动态按钮,单击该按钮时会使用弹出功能()。基于功能的方式,我不能使用按钮点击事件背后的代码。要么我需要调用C#按钮单击方法和触发弹出功能的jquery方法,要么我需要从jquery函数中引用C#。根据您的说法,AJAX可能是我的最佳选择(?)什么是
    returnStr
    方法,它必须在服务器上运行?我需要对数据库进行查询,以获取与每个按钮匹配的结果。例如,我制作按钮1到5。然后,我的表中有第1行到第5行。我需要查询第1行中的按钮1,第2行中的按钮2等。它真的只有5个值吗?您可以在页面加载时从数据库中提取所有5个值,并将它们嵌入到javascript中,以便在单击按钮时它们已经可用。不,实际上它大于150左右。但是,如果我提取页面加载上的所有值,我仍然必须能够访问JS中的数据。我想我可以有一个C#数组,并引用它,就像问题是我正在创建一个动态按钮,单击该按钮时会使用弹出功能()。基于功能的方式,我不能使用按钮点击事件背后的代码。要么我需要调用C#按钮单击方法和触发弹出功能的jquery方法,要么我需要从jquery函数中引用C#。根据您的说法,AJAX可能是我的最佳选择(?)什么是
    returnStr
    方法,它必须在服务器上运行?我需要对数据库进行查询,以获取与每个按钮匹配的结果。例如,我制作按钮1到5。然后,我的表中有第1行到第5行。我需要查询第1行中的按钮1,第2行中的按钮2等。它真的只有5个值吗?您可以从数据库中提取所有5个值
    public static string s;
    
    alert('<%=s%>');
    
    $.ajax({
        type: "POST",
        url: "default.aspx/returnStr",
        dataType: "json",
        contentType: 'application/json; charset=utf-8',
        error: function(result){
            alert("request failed" + result)
        },
        success: function(result){
            alert(result);
        }
    });