2016-08-03 2 views
0

Ich möchte eine Anfrage von meiner Js-Datei an meine Steuerung in eckigen senden.

Was ich tue, ist

var fd = new FormData(); 
    for (var i = 0; i < file.length; i++) { 
     fd.append("file", file[i]); 
    } 

$http.post('Employees/', $scope.Employee, fd, { 
     transformRequest: angular.identity, 
     headers: { 'Content-Type': undefined } 
    }).success(function (data) { 
     $scope.AddEditEmployee = false; 
     getEmployees(); 
    }).error(function (data, status, headers, config) { 
    }); 

Das Problem, das ich hier stehen, ist, dass ich die Werte von $ scope.Employees bekommen, aber das fd kommt leer. Dies ist ein Teil von

mit einigen Daten in AngularJS Datei hochladen

-Code in meinem Controller ist

public class EmployeesController: ApiController 
{ 
    EmployeeDM objEmpManager = new EmployeeDM(BaseDapper.CreateInstance()); 
[Route("Employees/")] 
    [HttpPost] 
    public void Post(EmployeeBO obj_emp) 
    //public void Post(EmployeeBO obj_emp1, EmployeeBO obj_emp) 
    { 
     try 
     { 
      var httpRequest = HttpContext.Current.Request; 
      string image_names = string.Empty; 
      string ResumeName = string.Empty; 
      string resumePath = HttpContext.Current.Server.MapPath("/Uploads/Resume/"); 
      if (httpRequest.Files.Count > 0) 
      { 
       string resume_full_path = string.Empty; 
       for (int i = 0; i < httpRequest.Files.Count; i++) 
       { 
        var postedFile = httpRequest.Files[i]; 
        ResumeName = postedFile.FileName; 
        resume_full_path = resumePath + obj_emp.name + ResumeName; 
        postedFile.SaveAs(resume_full_path); 
        image_names += resume_full_path.ToString() + ','; 
        obj_emp.resume = resume_full_path; 
        if (obj_emp.employee_id > 0) 
        { 
         objEmpManager.UpdateEmployee(obj_emp); 
        } 
        else 
        { 
         objEmpManager.SaveEmployee(obj_emp); 
        } 
       } 
      } 

     } 
     catch (Exception ex) 
     { } 

    }} 

Antwort

0

bereits.

var fd = new FormData(); 
for (var i = 0; i < file.length; i++) { 
    fd.append("file", file[i]); 
} 

for (var key in $scope.Employee) { 
     fd.append(key, $scope.Employee[key]); 
     alert($scope.Employee[key]); 
    } 

$http.post('Employees/', fd, { 
     headers: { 'Content-Type': undefined } 
    }).success(function (data) { 
     $scope.AddEditEmployee = false; 
     getEmployees(); 
    }).error(function (data, status, headers, config) { 
    }); 

Vom Backend müssen Sie das Objekt als Parameter entfernen und das aus der Form der Anfrage finden.

public void Post(){ 
EmployeeBo obj = new EmployeeBo(); 
obj.key= HttpContext.Current.Request.Form["Key"]; 

......... 
} 
+0

Vielen Dank für Ihre Antwort ... Ich habe versucht mit Ihrer Lösung ... Ich denke, ich bin fast da .. Welches Problem ich jetzt habe ist, dass ich einen Formularwert als "Mitarbeiter" in meinem Backend sehen kann. Aber wie bekomme ich die Werte, die in $ scope.Employee waren. Eigentlich bin ich ein Anfänger, also kann meine Frage einfach oder ohne Bedeutung sein. –

+0

Können Sie bitte debuggen das und überprüfen Sie, welcher Wert darin und bitte geben Sie mir hier, also kann ich Ihnen bessere Lösungen geben –

+0

Danke für Ihre Hilfe. Ich habe eine Schleife hinzugefügt und die Werte in meinem Backend für jede Taste erhalten –

0

Try this:

$http({ 
method:"POST", 
url:"Employees/", 
transformRequest: angular.identity, 
headers: { 'Content-Type': undefined }, 
data:{obj_emp1:$scope.Employee , obj_emp:fd } 
}).then(
function success(data){ 
$scope.AddEditEmployee = false; 
getEmployees();}, 
function error(data){ 
}); 
+0

Danke für Ihre Lösung. Ich habe versucht, dies zu tun, aber es geht nicht an den Controller. Melden Fehler POST http: // localhost: 1830/Mitarbeiter/415 (nicht unterstützte Medientyp) –

+0

würden Sie die Definition Ihrer Post-Methode ändern? Die post-Methode muss zwei Parameter haben. –

+0

Nein ... versucht, Ihre Lösung mit beiden meiner Code-Blöcke in der Controller-Datei ... –

Verwandte Themen