C# 两个具有不同签名的方法,jquery没有调用正确的方法

C# 两个具有不同签名的方法,jquery没有调用正确的方法,c#,jquery,C#,Jquery,有两种方法GetUserAssignedSystems()和GetUserAssignedSystems(字符串Id) 这些方法的作用非常不同。问题是,当我想调用GetUserAssignedSystems(stringid)时,就会调用无参数方法 方法如下: [WebMethod] [ScriptMethod] public IEnumerable GetUserAssignedSystems(string cacId) { return Data.UserManager.GetUse

有两种方法
GetUserAssignedSystems()
GetUserAssignedSystems(字符串Id)
这些方法的作用非常不同。问题是,当我想调用
GetUserAssignedSystems(stringid)
时,就会调用无参数方法

方法如下:

[WebMethod]
[ScriptMethod]
public IEnumerable GetUserAssignedSystems(string cacId)
{
    return Data.UserManager.GetUserAssingedSystems(cacId);
}

[WebMethod]
[ScriptMethod]
public IEnumerable GetUserAssignedSystems()
{
    //do something else
}
下面是进行调用的jQuery:

CallMfttService("ServiceLayer/UserManager.asmx/GetUserAssignedSystems", 
        "{'cacId':'" + $('#EditUserCacId').val() + "'}", function(result) {
            for (var userSystem in result.d) {
                $('input[UserSystemID=' + result.d[userSystem] + ']').attr(
                    'checked', 'true');
            }
        });
你知道为什么这个方法被忽视了吗

更新

以下是CallMfttService的代码

function CallMfttService(method, jsonParameters, successCallback, errorCallback){
if (errorCallback == undefined)
{
    errorCallback = function(xhr)
    {
        if (xhr.status == 501)
        {
            alert(xhr.statusText);
        }
        else
        {
            alert("Unexpected Error");
        }
    }
}

$.ajax({
    type: "POST",
    url: method,
    data: jsonParameters,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: successCallback,
    error: errorCallback
});

}Javascript不支持重载函数(使用相同名称的多个函数接受不同的参数),这与某些语言不支持重载函数的方式相同。如果需要它根据输入参数的存在选择性地执行任务,则必须在函数中添加检查,以确定变量是否已传递
If(param==undefined){}
,然后根据所述变量的存在或不存在以适当的方式进行操作。用不同的参数重新定义函数两次是行不通的

根据更新,尝试更改您的呼叫,如下所示:

CallMfttService("ServiceLayer/UserManager.asmx/GetUserAssignedSystems", 
    {'cacId': $('#EditUserCacId').val() }, function(result) {
        for (var userSystem in result.d) {
            $('input[UserSystemID=' + result.d[userSystem] + ']').attr(
                'checked', 'true');
        }
    });

实际上,您是在向jQuery$.ajax方法传递字符串,而不是对象,这可能会阻止您的值正确地到达服务器。让我知道它是如何工作的。

我不确定您是想发送JSON还是普通的对象文本。但在第一种情况下,您的JSON无效。。。JSON在字符串和键周围需要双引号:

 CallMfttService("ServiceLayer/UserManager.asmx/GetUserAssignedSystems", '{"cacId":"' + $('#EditUserCacId').val() + '"}', function(result) {
如果不知道
CallMfttService
的功能,很难说,但我也会尝试一下:

CallMfttService("ServiceLayer/UserManager.asmx/GetUserAssignedSystems", {cacId:   $('#EditUserCacId').val()}, function(result) {

我遇到了一个类似的问题,没有调用正确的C#WebMethod。我收到一个“未找到资源错误”。无论出于何种原因(我不确定确切原因,也许其他人可以详细说明),WebMethod类都不喜欢重载方法。它错误地解释了传递参数的类型。如果我删除C#WebMethod类中所有重载的方法并只留下一个,不管我留下了哪一个,它现在都会被调用并按预期工作。

谢谢!我不知道你不能有重载的方法。当我注释掉无参数方法时,一切都很完美。再次感谢@g、 但似乎调用正确函数的失败发生在c#级别,而不是JS。我不确定删除另一个函数是否解决了这个问题,或者只是掩盖了它。@Doug-我正要出去买一本新的javascript书,因为它在我看来确实不像js。除非这些函数可能生成发送到客户端的等效javascript函数。@doug neiner您能再详细说明一下吗?我不太熟悉C#函数和JS函数之间的关系。CallMfttService是否启动AJAX请求并将参数传递给C#函数?是否可以修改C#函数以包含对cacID变量存在性的检查?C#本身不是我的强项,但如果你能提供更多的代码,我可以尝试进一步帮助你。@doug neiner不确定我更改帖子是否会更新你,但我知道这条评论会标记你。我认为问题在于如何将参数传递给jQuery的ajax方法。谢谢