0

我无法将数组从 angularJS 传递到 mvc4 中的 web api 操作。

我的 $resource 是:

adminApp.factory('presentation', ['$resource',
function ($resource) {
    return $resource('/api/presentation/:id', { id: '@id' },
        {
            update: { method: 'PUT', params: { id: '@id' } },
            save: { method: 'POST', params: { model1: '@model1' } },
            remove: { method: 'DELETE', params: { id: '@id' } }
        }

    );
}]);

用于传递数据数组以保存它的AngularJS代码(我要传递的presentationItemList ):

$scope.savePresentation = function() {
        if ($scope.form.$valid) {

            if ($scope.presentation.Id != undefined && $scope.presentation.Id > 0) {
                $scope.presentation.$update({ id: $scope.presentation.Id });
            } else {
                $scope.presentation.$save({ model1: presentationItemList });
            }
        } else {
            $scope.addFormValidationAlert($scope.form);
        }
    };

我在 AngularJS 中保存操作后调用的 Api 操作:

 public HttpResponseMessage Post(PresentationItemModel model, List<PresentationElementInfoModel> model1)
    {
        var item = Mapper.Map<PresentationItemModel, Presentation>(model);

        model.Id = GetActionResultData(ServiceDataProvider.PresentationCrudService.SaveOrUpdate(item));
        if (model.Id.MoreThanZero())
        {
            return new HttpResponseMessage(HttpStatusCode.Accepted)
            {
                Content = new ObjectContent<PresentationItemModel>(model,
                                                                 new JsonMediaTypeFormatter())
            };
        }
        throw new HttpResponseException(HttpStatusCode.NotFound);
    }

我在萤火虫中收到错误:“无法将多个参数('model'和'model1')绑定到请求的内容”

此代码工作正常,如果我不从角度传递数组presentationItemList并且不将其映射到web api 操作的model1参数中。

请帮我!

4

1 回答 1

1

$save方法params参数用于绑定到 url 模板或作为查询字符串传递。这样做{ model1: presentationItemList }可能不起作用,因为我认为行为是序列化presentationItemList并将其添加到url。

在 Angular 方面,您应该将 presentationItemList 添加为 $scope.presation 上的子属性

$scope.presenation.items=presentationItemList

并在$save不传递参数的情况下执行。

WebAPI 的问题是它不能为 POST 使用多个参数。所以列表应该是的一部分,PresentationItemModel并且事情会起作用。

如果您无法更改服务器模型,那么方法应该是首先保存父级,获取父级的 id,然后再次调用以保存子级列表。

于 2013-10-31T13:45:27.683 回答