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