【发布时间】:2025-11-25 11:30:01
【问题描述】:
我错过了什么?我是 Angularjs 的新手。用 asp.net mvc 尝试 angularjs。我无法访问 asp.net mvc 控制器以使用 $resource of angular 向我返回 JsonResult。 但是,否则我会使用 $.getJson of javascript 但不使用 angularjs 获得成功。我错过了什么?请指导。感谢您的回复。
以下是我的服务
EbsMvcApp.factory('classListService', function ($resource, $q)
{
var resource = $resource
(
'/Home/ClassList'
, {}
//{ method: 'Get', q: '*' }, // Query parameters
, { 'query': { method: 'GET' , isArray:false } }
);
function get($q)
{
console.log('Service: classListServic > Started');
var Defered = $q.defer();
resource.get
(
function (dataCb)
{
console.log('success in http service call');
Defered.resolve(dataCb);
}
, function (dataCb)
{
console.log('error in http service')
Defered.reject(dataCb);
}
);
return Defered.promise; // if missed, would throw an error on func: then.
};
return { get: get };
});
角度控制器:
var EbsMvcApp = angular.module('myApp', ['ngResource']);
//'classListService',
EbsMvcApp.controller
(
'myAppController',
['$scope','classListService','$q' , function ($scope, classListService, $q)
{
console.log('controller myAppController started');
var classList = classListService.get($q);
classList = classList.then(
function ()
{
(
function (response)
{
console.log('class list function response requested');
return response.data;
}
);
}
);
console.log(classList.ClassName);
console.log(classList);
console.log('end part of ctrl');
$scope.classList = classList;
$scope.SelectedClassID = 0;
$scope.message = ' message from Controller ';
}
]
);
Asp.net MVC 控制器
namespace EBS_MVC.Controllers
{
public class HomeController : BaseController
{
ApplicationDbContext db = new ApplicationDbContext();
public JsonResult ClassList()
{
var List = new SelectList(db.tblClass, "ID", "ClassName");
return Json(List, JsonRequestBehavior.AllowGet);
}
}
}
浏览器的响应 (F12):
ControllerTry1.js:11 控制器 myAppController 已启动 serviceGetClassList.js:16 服务:classListServic > 已启动 ControllerTry1.js:28 未定义 控制器Try1.js:29 c ControllerTry1.js:31 ctrl 的结束部分 angular.js:12520 错误:[$resource:badcfg] [浏览器回复:屏幕截图][1]
【问题讨论】:
-
我不熟悉 angular $resource 但我可以看到您在控制器中 classListService.get() 的“then”部分中的代码正在传递一个匿名函数,其中内部是只需声明一个具有响应参数的匿名函数。您需要删除外部匿名函数才能按预期执行代码,并且控制器中的 console.log 行可能会在结果从服务返回之前运行,从而导致控制台中的“未定义”结果作为承诺尚未解决。
-
好的,我已经删除了指出匿名功能,但结果是一样的。带有以下日志:1-控制器 myAppController 已启动 2-服务:classListServic > 已启动 3-未定义 4-c(空对象) 5-ctrl 的结束部分
标签: javascript asp.net angularjs asp.net-mvc