2015-10-06 50 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调用,这是你看到帖子而不是获取的原因。就行动而言,我没有为它设定路线。 –