6

我想通過int數組,但我不能在的WebAPI方法傳遞整數數組的WebAPI方法

var postData = { "deletedIds": deletedIds }; 

    $.ajax({ 
     type: "DELETE", 
     traditional: true, 
     dataType: 'json', 
     contentType: 'application/json', 
     cache: false, 
     url: "/api/Management/Models", 
     data: JSON.stringify(postData), 
     success: ModelDeleted, 
     error: ModelNotDeleted 
    }); 

和apiController獲得的價值:

[HttpDelete] 
     public bool DeleteModel(int[] deletedIds) 
     { 
      return modelsRepository.DeleteModels(deletedIds); 
     } 
+0

我試圖刪除JSON.stringify但仍然沒有工作 – 2013-05-04 21:34:18

回答

8

您的代碼看起來對我很好。請定義「deletedIds」對象的結構。 一個建議是使用新的Array() 對象來初始化deletedIds屬性並刪除JSON.stringify 一個類似的問題問here

編輯

的Web API支持通過各種方式解析內容數據,但它不處理多個發佈的內容的值。你的問題的解決方案可能是創建一個具有int []類型屬性的ViewModel。下面 像代碼,

public class SimpleViewModel 
{ 
    public int[] deletedIds{ get; set; } 
} 

//Controller 
[HttpDelete] 
    public bool DeleteModel(SimpleViewModel deletedIds) 
    { 
     return modelsRepository.DeleteModels(deletedIds.deletedIds); 
    } 

並使用它作爲參數類型。

+0

我試圖用新陣,但仍得到的WebAPI方法的參數爲null – 2013-05-04 14:45:59

+0

感謝您的回覆,但您引用的問題是不一樣的當我在常規控制器中使用操作方法時,我的代碼工作正常,但當url到webapi時,它無法獲取數據 – 2013-05-04 14:48:58

+0

使用Firebug測試發佈數據。 – Shashank 2013-05-04 14:51:35

0

我懷疑stringify位弄亂了你的對象 - 你試過把它分配給一個變量來看看它是否是預期的格式?

你此刻的字符串化整個事情:

{ "deletedIds": deletedIds }

,而你可能要發送的後體是這樣的:

{ "deletedIds": JSON.stringify(deletedIds) }

+0

無論如何,如果你的控制器方法期望整數,爲什麼在JS中使它們串化呢? – 2013-05-04 18:41:06

+0

stringify只是一個嘗試,我在常規控制器中制定了一個測試操作方法,它的工作原理是mvc modelbinder,但webapi不行! – 2013-05-04 20:22:21

+1

@MuhammadAlaa - 發佈您發送請求的確切JSON。控制器方法究竟是什麼意思?你是否得到一個空陣列? – 2013-05-04 20:39:35

2

最後,基於在@Shashank回答它的工作和代碼修改爲:

var deletedIds = new Array(); 

deletedIds.push(modelId); 

var postData = { "DeletedIds": deletedIds }; 
$.ajax({ 
    type: "Delete", 
    traditional: true, 
    dataType: 'json', 
    cache: false, 
    url: "/api/Management/Models", 
    data: postData, 
    success: ModelDeleted, 
    error: ModelNotDeleted 
}); 

和apiController:

[HttpDelete] 
     public bool DeleteModels(DeleteViewModel dvm) 
     { 
      return modelsRepository.DeleteModels(dvm.DeletedIds); 
     } 

,爲DeleteViewModel:

public class DeleteViewModel 
    { 
     public int[] DeletedIds { get; set; } 
    }