2016-04-10 16 views
-1

Hier bekommen ich ein Objekt und eine Datei von meinem Winkel Service an:asp.net Mvc mit Winkeln mit mehreren Parametern Ajax-Aufruf HttpPostedFileBase Datei Nullwert

$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'); 
      }); 

     } 
    }; 

und in meinem Winkelservice:

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) 

      }) 
     }, 

und in meinem Projekt/Createproject:

public JsonResult CreateProject(Project project, HttpPostedFileBase file) 
    { 
    } 

Jetzt Problem in jeder Situation ist mein HttpPostedF ileBase-Datei gibt null zurück. Aber wenn ich die Datei durch einzelne Parameter übergeben als:

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 } 
      }) 
     } 

es zeigt den Wert Datei, sondern immer dann, wenn es unter Verwendung mehrerer Parameter wie wie Projektobjektdatei übergeben werden gefunden, aber Projektobjekt war null. Wie kann ich mehrere Parameter als ein Objekt und eine Datei von Ajax zu asp.net Controller in MVC5 übergeben?

Antwort

1

Sie könnten den project Parameter als Teil der Nutzlast FormData passieren:

Binder Modell
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 } 
}); 

Standard-Feldbenennungsregeln gelten für die ASP.NET MVC.

+0

kann ich ganze Projektobjekte wie fdata.append übergeben ('Projekt', Projekt); ......? –

+0

Wie kann ich das vollständige Projekt obj und im Controller übergeben, wie kann ich es durch Parameter definieren? –