我正在尝试传递一个int数组但是我无法在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 :(得分:8)
你的代码看起来很漂亮。请定义“deletedIds”对象的结构。 一个建议是使用 新阵列() object初始化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);
}
并将其用作参数类型。
答案 1 :(得分: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; }
}
答案 2 :(得分:0)
我怀疑stringify位搞砸了你的对象 - 你是否尝试将它分配给变量以查看它是否是预期的格式?
你现在正在整理整个事情:
{ "deletedIds": deletedIds }
虽然您可能想要发布的帖子是:
{ "deletedIds": JSON.stringify(deletedIds) }