使用“WebMethod”调用C#方法返回“undefined”

时间:2016-11-01 17:39:29

标签: javascript c# jquery ajax webmethod

首先,我知道有很多类似的问题,但是 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(结果),我只是得到页面的语法。

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

C#

public static string s;

JavaScript的:

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

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

我尝试过的最后一件事是ajax,但即使我根据SO上找到的答案对其进行建模,我也无法按照我的意愿使其工作 - 它返回“[object Object]”:< / p>

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

非常感谢任何建议!!

1 个答案:

答案 0 :(得分:2)

你不能做你提出的建议。 Javascript在Web浏览器中运行。 C#在服务器上运行。您无法在浏览器中运行C#代码。

使用alert('<%=s%>');有效,因为在发送到客户端之前,它会在服务器上进行评估。

您有两种选择:

  1. 制作一个可以满足您需要的纯Javascript函数。
  2. 使用ASP控件中的普通Web表单事件处理程序(即按钮的OnClick方法)。
  3. 向服务器发出AJAX回叫以执行您需要的操作。
  4. 我看到你尝试了#3,但你没有正确地做到这一点。 “default.aspx / returnStr”中的URL并不意味着什么。它不会自动运行default.aspx.cs中的returnStr方法。

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

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