2016-06-23 5 views
2

In einem Controller A habe ich eine Methode, die beim Klicken auf eine Schaltfläche zum Senden die Daten bei einer MVC-Controller-Aktionsmethode speichert.Kann nicht lesen Eigenschaftserfolg von undefined in Angular JS

$scope.groupmembership.submit = function() { 
    if ($scope.groupMembershipUserInputForm.$valid) { 
     $scope.groupmembershipUploadParams = { 
      "chapterCode": $scope.groupmembership.chapterCode, 
      "createdDate": $filter('date')(new Date($scope.groupmembership.createdDate), 'MM/dd/yyyy'), 
      "endDate": $filter('date')(new Date($scope.groupmembership.endDate), 'MM/dd/yyyy') 
     }; 

     UploadDataServices.getGroupMembershipUploadParams(
      $scope.groupmembershipUploadParams) 
      .success(function (result) { 
       $rootScope.$emit(
        'validateUploadedFilesEvent', 
        $scope.groupmembershipUploadParams 
       ); 
      }); 
    } 
} 

UploadDataServices.getGroupMembershipUploadParams

getGroupMembershipUploadParams: function(uploadParams){ 
    $http.post(BasePath + "uploadNative/setGroupMembershipUploadParams", uploadParams, { 
     headers: { 
      "Content-Type": "application/json", 
      "Accept": "application/json" 
     } 
    }).success(function (result) { 
     console.log(result); 
    }) 
}, 

uploadNativeMVC Controller

public async Task<JsonResult> setGroupMembershipUploadParams(GroupMembershipUploadParams arg) 
{ 
    TempData["GroupMembershipUserUplaodDetails"] = arg; //Save the data for later use 
    var result = new JsonResult(); 
    result.Data = "Success"; // Return a Excel Upload Limit Exceeded 
    result.JsonRequestBehavior = JsonRequestBehavior.AllowGet; 
    return result; 
} 

Diese Daten gespeichert Ich möchte mit anderen Methoden in der MVC-Controller in nachfolgenden Aufrufen wieder zu verwenden.

Ich möchte keine Antwort zurück, aber nur um sicher methodeB machen() in Winkel ausführt, nachdem die Daten in MVC gespeichert wird, habe ich ein Ereignis ausgelöst, nachdem ich Erfolg Antwort erhalten

UploadDataServices.getGroupMembershipUploadParams(
    $scope.groupmembershipUploadParams) 
    .success(function (result) { 
     $rootScope.$emit('methodB', $scope.groupmembershipUploadParams); 
    }); 

Ich kenne dieses Ergebnis .data in MVC Schöpfung ist redundante,

var result = new JsonResult(); 
result.Data = "Success"; // Return a Excel Upload Limit Exceeded 
result.JsonRequestBehavior = JsonRequestBehavior.AllowGet; 
return result; 

aber wie Sie sicherstellen,

$rootScope.$emit('methodB', $scope.groupmembershipUploadParams); 

wird erst ausgelöst, nachdem tempData gespeichert wurde.

UploadDataServices.getGroupMembershipUploadParams(
    $scope.groupmembershipUploadParams) 
    .success(function (result) 

wirft mich Fehler. Was kann besser gemacht werden? Ich weiß, dass es viele redundante Codezeilen gibt.

Vielen Dank im Voraus.

Antwort

4

Wenn Sie in Ihrer Methode keine return haben, wird undefined zurückgegeben. Deshalb erhalten Sie einen Fehler.

Korrigiert:

getGroupMembershipUploadParams: function(uploadParams){ 
    return $http.post(
     BasePath + "uploadNative/setGroupMembershipUploadParams", 
     uploadParams, 
     { 
      headers: { 
       "Content-Type": "application/json", 
       "Accept": "application/json" 
      } 
     }) 
     .success(function (result) { 
      console.log(result); 
     }); 
}, 
+0

Danke für die Antwort, aber alle die Renditen von MVC, nur um zurückzukehren und die Überprüfung, dass die Ereignisse außer in MVC TempData erst nach erfolgreicher gefeuert sind notwendig? Können wir das vermeiden? – StrugglingCoder

+0

Ich bin nicht wirklich sicher, was du fragst. Für diesen Teil: _aber alle Rückkehr von MVC_, sind Sie besorgt, dass die Rückkehr der Zeichenfolge "" Erfolg "ist verschwenderisch? Das ist nicht wirklich etwas, worüber man sich Sorgen machen müsste, aber man könnte wahrscheinlich eine 'Null'-Antwort zurückgeben, wenn man möchte. – JLRishe

+0

Ja, ich bin hart codieren. Ich möchte nur sicherstellen, dass ich erst nach einem erfolgreichen Speichern in MVC $ rootScope. $ Emit, nicht davor ausführen kann. Also ist dieser Ansatz in Ordnung? – StrugglingCoder