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方法。谢谢