0

mvc4 で angularJS から 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);
    }

firebugでエラーが表示されます: 「複数のパラメーター ('model' および 'model1') をリクエストのコンテンツにバインドできません」

angularから配列presentationItemListを渡さず、Web APIアクションのmodel1パラメーターにマップしない場合、このコードは正常に機能します。

私を助けてください!

4

1 に答える 1

1

$saveメソッドparamsパラメーターは、url テンプレートにバインドするために使用されるか、クエリ文字列として渡されます。動作はpresentationItemList{ model1: presentationItemList }をシリアル化し、それをURLに追加することになると思うので、うまくいかないかもしれません。

Angular 側では、presentationItemList を $scope.presenation のサブ プロパティとして追加する必要があります。

$scope.presenation.items=presentationItemList

$saveパラメータを渡さずに実行します。

WebAPI の問題は、POST に複数のパラメーターを使用できないことです。したがって、リストはの一部である必要がありPresentationItemModel、物事はプロパティで機能します。

サーバー モデルを変更できない場合は、最初に親を保存し、親の ID を取得してから、子リストを保存するために 2 回目の呼び出しを行う必要があります。

于 2013-10-31T13:45:27.683 に答える