Angularjs asp.net mvc带angular和多参数ajax调用HttpPostedFileBase文件获取空值

Angularjs asp.net mvc带angular和多参数ajax调用HttpPostedFileBase文件获取空值,angularjs,ajax,asp.net-mvc-5,httppostedfilebase,Angularjs,Ajax,Asp.net Mvc 5,Httppostedfilebase,在这里,我从angular service发送一个对象和一个文件: $scope.addProject = function () { { var project = {}; project["Id"] = $scope.Id; project["ProjectCode"] = $scope.ProjectCode; var file = $scope.myFile;

在这里,我从angular service发送一个对象和一个文件:

 $scope.addProject = function () {
        {
            var project = {};
            project["Id"] = $scope.Id;
            project["ProjectCode"] = $scope.ProjectCode;

            var file = $scope.myFile;
            projectModelService.saveProject(project,file)
            .success(function (data) {

            })
            .error(function (xhr) {
                $ngBootbox.alert('Error in saving data');
            });

        }
    };
saveProject: function (project) {
             var parameters = { project: project, file: file };

             var fdata = new FormData();
             fdata.append('file', file);

             var param = { project: project, file: fdata.append('file', file) };
            return $http({
                url: '/Project/CreateProject',
                method: 'POST',
                data: project
               // contentType: false, // Not to set any content header
               // processData: false, // Not to process data
               // transformRequest: angular.identity,
               // headers: { 'Content-Type': undefined },
                dataType: "json",
                data: JSON.stringify(param)

            })
        },
在我的服务中:

 $scope.addProject = function () {
        {
            var project = {};
            project["Id"] = $scope.Id;
            project["ProjectCode"] = $scope.ProjectCode;

            var file = $scope.myFile;
            projectModelService.saveProject(project,file)
            .success(function (data) {

            })
            .error(function (xhr) {
                $ngBootbox.alert('Error in saving data');
            });

        }
    };
saveProject: function (project) {
             var parameters = { project: project, file: file };

             var fdata = new FormData();
             fdata.append('file', file);

             var param = { project: project, file: fdata.append('file', file) };
            return $http({
                url: '/Project/CreateProject',
                method: 'POST',
                data: project
               // contentType: false, // Not to set any content header
               // processData: false, // Not to process data
               // transformRequest: angular.identity,
               // headers: { 'Content-Type': undefined },
                dataType: "json",
                data: JSON.stringify(param)

            })
        },
在my Project/Createproject中:

  public JsonResult CreateProject(Project project, HttpPostedFileBase file)
    {
     }
现在的问题是,在任何情况下,我的HttpPostedFileBase文件都返回null。但如果我通过单个参数传递文件,则为:

 uploadProjectModelList: function (file) {
            var fdata = new FormData();
            var url = '/Project/UploadProjectFGModelListExcelFile';
            fdata.append('file', file);
            return $http.post(url, fdata, {
                transformRequest: angular.identity,
                headers: { 'Content-Type': undefined }
            })
        }

它显示文件值,但每当使用它传递多个参数时,都会找到类似项目对象的文件,但项目对象为空。如何将多个参数作为对象和文件从ajax传递到MVC5中的asp.net控制器?

您可以将
项目
参数作为
表单数据
有效负载的一部分传递:

var fdata = new FormData();
var url = '/Project/UploadProjectFGModelListExcelFile';
fdata.append('file', file);

fdata.append('project.Id', project.id);
fdata.append('project.Foo', project.foo);
fdata.append('project.Bar', project.bar);
fdata.append('project.Baz.Bazinga', project.baz.bazinga);
...

return $http.post(url, fdata, {
    transformRequest: angular.identity,
    headers: { 'Content-Type': undefined }
});

标准字段命名规则适用于ASP.NET MVC模型绑定器。

我如何通过完整的项目obj和在控制器中如何通过参数定义它??