6

我正在尝试传递一个 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);
        }
4

3 回答 3

9

你的代码对我来说看起来不错。请定义“deletedIds”对象的结构。一个建议是使用 new Array() 对象来初始化 deletedIds 属性并删除 JSON.stringify() 。在这里问了一个类似的问题。

编辑

Web API 支持以多种方式解析内容数据,但它不处理多个发布的内容值。您的问题的解决方案可能是创建一个具有 int[] 类型属性的 ViewModel。就像下面的代码,

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

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

并将其用作参数类型。

于 2013-05-04T14:42:01.317 回答
2

最后,基于@Shashank Answer,它起作用了,代码修改为:

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; }
    }
于 2013-05-05T08:01:44.233 回答
0

我怀疑 stringify 位弄乱了您的对象-您是否尝试将其分配给变量以查看它是否是预期的格式?

你现在正在把整个事情串起来:

{ "deletedIds": deletedIds }

而您可能想要作为帖子正文发送的是:

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

于 2013-05-04T17:02:38.717 回答