将数组从AngularJS传递给WebAPI并从WebAPI

时间:2016-06-06 12:53:37

标签: javascript arrays asp.net-web-api

让我们说我的客户端模型中有一个数组:

        vm.dataSheets = [
        { value: 0, text: localize.getLocalizedString('_ProductsAndServices_'), selected: selected},
        { value: 1, text: localize.getLocalizedString('_Holidays_'), selected: selected },
        { value: 2, text: localize.getLocalizedString('_Locations_'), selected: selected },
        { value: 3, text: localize.getLocalizedString('_OpHours_'), selected: selected },
        { value: 4, text: localize.getLocalizedString('_Users_'), selected: selected }
    ];

我将其绑定到HTML上的复选框列表。我想将已检查的值发送到Web API。使用angularJS我可以按如下方式过滤所选对象:

$filter('filter')(vm.dataSheets, { selected: true })

这将返回整个对象的数组。有没有一种简短的方法可以将选定的值检索为1,2,3等......?

现在,我将数据发送到Web API,如下所示:

  var fd = new FormData();
        fd.append('file', file);
        fd.append('clientId', $rootScope.appData.clientId);
        fd.append('sheets', $filter('filter')(vm.dataSheets, { selected: true }));

        $http.post("TIUSP/systemengine/ClientSupply", fd, {
            withCredentials: true,
            headers: {'Content-Type': undefined },
            transformRequest: angular.identity
        }).success(function () {

        }

在Web API中,如何检索所选值?当我使用

HttpContext.Current.Request["sheets"];

它给我一个字符串作为[object,object] [object,object]等...

1 个答案:

答案 0 :(得分:1)

要将所选值作为带有ID的数组返回,您可以创建自定义过滤器:

app.filter('selected', function() {
  return function(items) {
    var filtered = [];
    for (var i = 0; i < items.length; i++) {
      var item = items[i];
      if (item.selected === true) {
        filtered.push(item.id);
      }
    }
    return filtered;
  };
});

然后,使用它:

var fd = {
    'file': file,
    'clientId': $rootScope.appData.clientId,
    'sheets': $filter('selected')(foo.results)
};

    $http.post("TIUSP/systemengine/ClientSupply", fd, {
       withCredentials: true,
       headers: {'Content-Type': undefined },
       transformRequest: angular.identity
    }).success(function () {    
}

这将创建如下内容:

{
   file: 'path-to-my-filez/image.png',
   clientId: 11,
   sheets: [1,2,3,4]
}

在您的Web API控制器

创建一个类,用于映射您在请求中发送的参数:

public class ClientSupplyViewModel
{
    public string file {get; set;}
    public int clientId [get; set;}
    public int[] sheets {get; set;}
}

然后,在你的控制器中使用它:

[HttpPost]
public HttpResponseMessage ClientSupply(ClientSupplyViewModel data)
{

}

上面的控制器只是一个例子。唯一重要的部分是数据参数,其中包含您的File,ClientId和整数数组。