使用 "WebMethod" returns "undefined" 调用 C# 方法

Calling C# method using "WebMethod" returns "undefined"

首先,我知道有很多问题与此类似,但其中 none 对我的特殊情况有所帮助(很可能我只需要澄清一下,我不想打开旧线程)。

我正在创建一个应用程序,我需要在 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#:

[WebMethod]
public static string returnStr(string Id)
{       
    // ... blah blah make query, return string s
    return s;
}

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


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

C#

public static string s;

JavaScript:

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

这有效,但是当我调用 WebMethod 时,我无法修改 s。


我试过的最后一件事是 ajax,但即使我根据在 SO 上找到的答案对其进行建模,我也无法让它像我希望的那样工作 - 它 returns "[对象对象]":

AJAX:

$.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);
    }
});

非常感谢任何建议!!

你不能按照你的提议去做。 Javascript 在网络浏览器中是 运行。 C# 在服务器上是 运行。您不能在浏览器中 运行 C# 代码。

使用 alert('<%=s%>'); 是可行的,因为它在 被发送到客户端之前 被评估。

你有两个选择:

  1. 创建一个纯Javascript函数来满足您的需求。
  2. 使用 ASP 控件中的普通 Web 表单事件处理程序(即按钮的 OnClick 方法)。
  3. 对服务器进行 AJAX 回调以执行您需要的操作。

我看到你尝试了#3,但你没有做对。 "default.aspx/returnStr" 处的 URL 没有任何意义。它不会自动 运行 default.aspx.cs.

中的 returnStr 方法

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

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