我在MVC中使用angular是新的,我想用ASP.NET MVC EF从我的控制器读取数据到角度。 我试试这个:
我在我的MVC控制器中添加了(路径是' /Controllers/BrandController.cs')这段代码:
public JsonResult GetBrands()
{
var result = db.Brands.ToList();
return Json(result, JsonRequestBehavior.AllowGet);
}
然后在文件js中我将服务和控制器都设置为angular,即代码:
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;
}]);
我错了什么?
谢谢你的答案!!!
答案 0 :(得分:1)
由于控制器名称为BrandController
,因此网址应为/Brand/GetBrands
。
BrandService.getBrands = function () {
return $http.get('/Brand/GetBrands');
};
通常,当您处理此类问题时,您希望使用Fiddler,Chrome Plugin PostMan或其他一些工具进行调试。
答案 1 :(得分:0)
如果你的C#控制器是' BrandController'那么URL应该是/ Brand / GetBrands。只需修改你的$ http方法,如下所示:
BrandService.getBrands = function () {
return $http.get('/Brand/GetBrands');
};
最好在[HttpGet]
方法之上添加GetBrands
属性。
答案 2 :(得分:0)
更改为
return $http.get('/Brand/GetBrands');
答案 3 :(得分:0)
胜利是对的。在定义角度控制器时,我也发现了一个问题。
BrandApp.controller('BrandController', function ($scope, BrandService) {
...
})
你应该有类似的东西:
BrandApp.controller('BrandController', ['$scope', 'BrandService', function ($scope, BrandService) { ... }])
每次添加依赖项时,都必须将其添加到作为第二个参数的数组和该数组末尾的匿名函数的参数列表中。
即使您的控制器如下所示,您也应始终使用数组作为第二个参数:
MyApp.controller('MyController', [function() { ... }])
它更安全。如果我没记错的话,某些版本的角度可能会破坏(但并不总是),如果它丢失了。