2015-10-06 35 views
1

我有一個角度應用程序,我試圖從服務器獲取用戶列表。我遇到了一個問題。我有頁面調用CurrentUsers。如果CurrentUsers方法返回一個Json對象,則無論我在應用程序控制器和html頁面中做什麼,整個對象都會顯示在頁面上。如果該方法返回一個視圖,它不會顯示任何內容。但是,我可以在cotroller中硬編碼json對象,並且它可以正常工作。 因此,我創建了另一個返回json對象的方法。我打了一個電話給那個方法,但是它沒有到​​達服務器。您的幫助將非常感謝。AngularJS獲取方法不起作用

的CurrentUsers方法返回JSON對象,在屏幕上的整個JSON對象顯示,而不管

[HttpGet] 
    public JsonResult CurrentUsers() 
    { 
     List<Users> currentUser = new List<Users>() 
     { 
      new Users{ UserName = "JDoe", Professor="SSmith", Course = "English1"}, 
      new Users{ UserName = "ADan", Professor="SDhor", Course = "Science"}, 
      new Users{ UserName = "ADes", Professor="SCarry", Course = "Religion101"}, 
      new Users{ UserName = "DJay", Professor="SCrowe", Course = "Teaching101"}, 
      new Users{ UserName = "MAnne", Professor="TRow", Course = "PreCalc"}, 
     }; 
     return Json(new { Ok = true, data= currentUser }); 
     // return View(); 
    } 

如果上述方法返回一個視圖,我可以修改如下所示的控制器作爲 ,和我會看到相應的信息

Registration.controller('CurrentUsersController', function ($scope, $http) { 
$scope.currentUsers = [{ "Professor": "SSmith", "UserName": "JDoe", "Course": "English1" }, { "Professor": "SDhor", "UserName": "ADan", "Course": "Science" }, { "Professor": "SCarry", "UserName": "ADes", "Course": "Religion101" }] 
}); 

我修改了控制器使用Servi大街並創建了下面的方法來讀取當前用戶,以便該視圖可以簡單地返回一個View()。但是,我無法獲得'GET'的工作。

[HttpGet] 
    public JsonResult GetUsers() 
    { 
     List<Users> currentUser = new List<Users>() 
     { 
      new Users{ UserName = "JDoe", Professor="SSmith", Course = "English1"}, 
      new Users{ UserName = "ADan", Professor="SDhor", Course = "Science"}, 
      new Users{ UserName = "ADes", Professor="SCarry", Course = "Religion101"}, 
      new Users{ UserName = "DJay", Professor="SCrowe", Course = "Teaching101"}, 
      new Users{ UserName = "MAnne", Professor="TRow", Course = "PreCalc"}, 
     }; 
     return Json(new { Ok = true, data = currentUser , message = 
     "Success"}, JsonRequestBehavior.AllowGet); 
    } 

的修改CurrentUsers方法返回一個視圖

public ActionResult CurrentUsers() 
     { 
      return View(); 
     } 

我修改控制器

Registration.controller('CurrentUsersController', function ($scope, GetUSerService) { 
    $scope.message = 'this is the Current User controller'; 
    $scope.currentUsers = []; 
    var result = GetUSerService.getData() 
       .then(function (result) { 
        console.log('the result'); 
        console.log(result.data); 
       }); 
}); 

我的服務

Registration.service('GetUSerService', function ($http,$q) { 
    this.getData = function() { 
     var deferredObject = $q.defer(); 
     $http.get('/Home/GetUsers'). 
     success(function (data) { 
      console.log('service call data'); 
      console.log(data); 
      deferredObject.resolve({ success: true, data : data.data }); 
     }). 
     error(function() { 
      deferredObject.resolve({ success: false, data : '' }); 
     }); 

     return deferredObject.promise; 
    }; 
}); 

Updated 10/6 @ 5:50 @FernandoPinheiro答案適合我。唯一的是GetUsers操作被調用兩次。

enter image description here

更新10/7

我想通了,爲什麼後正在做兩次。在我的模板上,我有ng-app =「註冊」,並且我有ng-controller =「CurrentUsersController」。因爲我在路由提供程序中指定了控制器名稱,所以我不需要將它添加到局部視圖中。只要我從視圖中刪除它,它就按預期工作。

回答

3

您的GetUserService正在調用$http.post('/Home/GetUsers')而不是$http.get('/Home/GetUsers')

另外,不應該爲動作設置路由屬性?

+0

:)發生在每個程序員,對嗎? :P – Swag

+0

當然!有時我們只需要另一雙眼睛:) :) –

+0

我正在玩$ http調用,這是你看到帖子而不是獲取的原因。就行動而言,我沒有爲它設定路線。 –