2010-06-15 90 views
3

有兩種方法GetUserAssignedSystems()GetUserAssignedSystems(string Id) 這些方法的行爲彼此非常不同。問題是,當我想調用GetUserAssignedSystems(string Id)時,調用無參數方法。兩種方法具有不同的簽名,jquery沒有調用正確的方法

這裏是方法:

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

爲什麼被忽略此方法的任何想法?

UPDATE

下面是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 
}); 

}代碼

回答

4

的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 $就法,這可能阻止正確到達服務器你的價值觀。讓我知道那是怎麼回事。

+0

謝謝!我沒有意識到你不能有重載的方法。當我註釋掉無參數方法時,一切都很完美。再次感謝! – Avien 2010-06-15 16:19:04

+0

當然!樂意效勞。 – 2010-06-15 16:21:07

+2

@ g.d.d.c。但似乎沒有調用正確的功能發生在C#級別,而不是JS。我不確定刪除其他功能是否解決了問題,或者僅僅是掩蓋了它。 – 2010-06-15 16:26:08

0

我不確定你的意思是發送JSON還是普通的對象文字。但是,在第一種情況下,你的JSON是無效的...... JSON需要字串,並且按鍵雙引號:

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

不知道什麼CallMfttService呢,很難說,但我會嘗試高清這個問題,以及:

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

我有一個類似的問題,正確的C#WebMethod沒有被調用。我收到「資源未找到錯誤」。似乎無論出於什麼原因(我不確定爲什麼,或許其他人可以詳細說明),WebMethod類不喜歡重載的方法。它錯誤地解釋了傳遞參數的類型。如果我刪除C#WebMethod Class中的所有重載方法並留下一個,不管我留下哪一個,它現在都會調用並按預期工作。

相關問題