2016-06-11 61 views
1

我是新的在MVC中使用角度,我正在从我的控制器使用ASP.NET MVC EF,角度读取数据。 我尝试用这样的:AngularJS和Asp.Net之间的连接MVC

我在MVC控制器添加(路径为“/Controllers/BrandController.cs”)此代码:

public JsonResult GetBrands() 
     { 
      var result = db.Brands.ToList(); 
      return Json(result, JsonRequestBehavior.AllowGet); 
     } 

然后在文件JS我把两个服务和角度控制器,即代码:

var BrandApp = angular.module('BrandApp', []); 

//Controller 
BrandApp.controller('BrandController', function ($scope, BrandService) { 

    getBrands(); 
    function getBrands() { 
     BrandService.getBrands() 
      .success(function (items) { 
       $scope.brands = items; 
       console.log($scope.brands); 
      }) 
      .error(function (error) { 
       $scope.status = 'Unable to load customer data: ' + error.message; 
       console.log($scope.status); 
      }); 
    } 

}); 

//service 
BrandApp.factory('BrandService', ['$http', function ($http) { 

    var BrandService = {}; 
    BrandService.getBrands = function() { 
     return $http.get('/Home/GetBrands'); 
    }; 
    return BrandService; 

}]); 

我错了什么?

谢谢你的答案!

回答

1

由于控制器名称为BrandController,所以URL应为/Brand/GetBrands

BrandService.getBrands = function() { 
    return $http.get('/Brand/GetBrands'); 
}; 

通常情况下,当你处理那样的问题,你想用FiddlerChrome Plugin PostMan,或其他一些工具来调试。

+0

非常感谢! – Dona

0

如果您的C#控制器是'BrandController',那么URL应该是/ Brand/GetBrands。只需修改您的$ HTTP方法,像这样:

BrandService.getBrands = function() { 
    return $http.get('/Brand/GetBrands'); 
}; 

这也是很好的做法,添加上述GetBrands方法[HttpGet]属性。

+0

非常感谢你! – Dona

0

更改为

return $http.get('/Brand/GetBrands'); 
+0

非常感谢! – Dona

0

赢是正确的。当你定义你的角度控制器时,我也会看到一个问题。 你有

BrandApp.controller('BrandController', function ($scope, BrandService) { 
... 
}) 

而且你应该有这样的事情:

BrandApp.controller('BrandController', ['$scope', 'BrandService', function ($scope, BrandService) { ... }]) 

每次添加你必须将它添加到一个数组,它是第二个参数和参数列表的依赖该数组末尾的匿名函数。

而且你应该总是使用数组,即使你的控制器看起来像第二个参数:

MyApp.controller('MyController', [function() { ... }]) 

它只是更安全。如果我没有记错,某些版本的角色可能会因为缺失而破裂(但并非总是)。