首先,我知道有很多与此类似的问题,但没有一个对我的具体情况有帮助(很可能我只需要澄清,但我不需要想要打开一个旧线程)。
我正在创建一个应用程序,我需要在 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上找到的答案对其进行建模,我也无法让它按照我希望的方式工作 - 它返回“[object Object]”:
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%>');
之所以有效,是因为它在发送到客户端之前在服务器上进行了评估。
您有两个选择:
- 创建一个满足您需要的纯 Javascript 函数。
- 使用 ASP 控件中的普通 Web 表单事件处理程序(即按钮的 OnClick 方法)。
- 向服务器发出 AJAX 回调来执行您需要的操作。
我看到您在#3 上进行了尝试,但是您做得不正确。 “default.aspx/returnStr”处的 URL 没有任何意义。它不会自动运行returnStr
default.aspx.cs 中的方法。
你最好使用#2。这将是最简单的。
更新: 另一种选择是使用 asp 按钮,如#2,然后在 OnClick 方法中使用 ClientScript.RegisterStartupScript ,这将在回发完成后将 Javascript 注入(inject)到页面中。在您注入(inject)的 JavaScript 中,您可以运行代码来打开弹出窗口。
关于javascript - 使用 "WebMethod"调用 C# 方法返回 "undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40365554/