在 ASP.NET Web 表单中使用 abp.services in JavaScript
Use abp.services in JavaScript in ASP.NET Web Forms
我知道之前有人问过 ,但我的问题是关于直接在 JavaScript 中使用 abp.services
方法。
假设我有:
public interface ISecurityAppService : IApplicationService
{
List<PacsUser_C_Extented> GetAll();
}
public class SecurityAppService : ApplicationService, ISecurityAppService
{
public List<PacsUser_C_Extented> GetAll()
{
// ...
return allUsers;
}
}
所有样板服务都将很好地注册为:
public class Global : AbpWebApplication<ImmenseWebModule>
{
protected override void Application_Start(object sender, EventArgs e)
{
base.Application_Start(sender, e);
}
}
正如 ASP.NET Boilerplate
文档所说,为了能够使用自动生成的服务,您应该在页面中包含所需的脚本,例如:
<script src="~/Abp/Framework/scripts/libs/angularjs/abp.ng.js"></script>
<script src="~/api/AbpServiceProxies/GetAll?type=angular"></script>
我知道第二行说要使用 angular
控制器,但我将其更改为:
<script src="~/api/AbpServiceProxies/GetAll?v=@(Clock.Now.Ticks)">script>
...仍然没有任何效果。
当我想在 ASP.NET Web 表单的 JavaScript 代码中使用 getAll
时,它会给我:
abp.service is not defined
那么如何在脚本元素 <script>...</script>
中使用 getAll
或 SecurityAppService
中的其他方法——而不是 Angular?
提前致谢。
更新
当我使用 Angular 控制器和 MVC 部分视图时,如:
(function () {
var app = angular.module('app');
var controllerId = 'sts.views.security.list';
app.controller(controllerId, [
'$scope', 'abp.services.remotesystem.security',
function ($scope, securityService) {
var vm = this;
vm.localize = abp.localization.getSource('ImmenseSystem');
vm.users = [];
vm.refreshUserList = function () {
abp.ui.setBusy( // Set whole page busy until getTasks completes
null,
securityService.getAll().success(function (data) {
vm.users = data;
abp.notify.info(vm.localize('UserListLoaded'));
})
);
};
vm.refreshUserList();
}
]);
})();
我可以使用那个功能。
但我想在 ASP.NET Web 表单页面的 JavaScript 中使用它。
您正在注射 abp.services.remotesystem.security。
所以你可以使用这个命名空间来访问函数。打开 chrome 控制台并写入 abp.services.remotesystem.security 你会看到函数
最后我通过以下简单的方法解决了问题...
1- 运行 项目并通过 Angular 和局部视图 (MVC) 使用该样板服务
像有问题的更新部分。
2- 运行 并重定向到视图后,我转到 View page source
并查看依赖脚本。
3- 我将以下脚本源复制到一个页面:
<script src="Scripts/jquery-2.2.0.min.js"></script>
<script src="Scripts/jquery-ui-1.11.4.min.js"></script>
<script src="Scripts/jquery.validate.min.js"></script>
<script src="Scripts/modernizr-2.8.3.js"></script>
<script src="Abp/Framework/scripts/utils/ie10fix.js"></script>
<script src="Scripts/json2.min.js"></script>
<script src="Scripts/bootstrap.min.js"></script>
<script src="Scripts/moment-with-locales.min.js"></script>
<script src="Scripts/jquery.blockUI.js"></script>
<script src="Scripts/toastr.min.js"></script>
<script src="Scripts/sweetalert/sweet-alert.min.js"></script>
<script src="Scripts/others/spinjs/spin.js"></script>
<script src="Scripts/others/spinjs/jquery.spin.js"></script>
<script src="Scripts/angular.min.js"></script>
<script src="Scripts/angular-animate.min.js"></script>
<script src="Scripts/angular-sanitize.min.js"></script>
<script src="Scripts/angular-ui-router.min.js"></script>
<script src="Scripts/angular-ui/ui-bootstrap.min.js"></script>
<script src="Scripts/angular-ui/ui-bootstrap-tpls.min.js"></script>
<script src="Scripts/angular-ui/ui-utils.min.js"></script>
<script src="Abp/Framework/scripts/abp.js"></script>
<script src="Abp/Framework/scripts/libs/abp.jquery.js"></script>
<script src="Abp/Framework/scripts/libs/abp.toastr.js"></script>
<script src="Abp/Framework/scripts/libs/abp.blockUI.js"></script>
<script src="Abp/Framework/scripts/libs/abp.spin.js"></script>
<script src="Abp/Framework/scripts/libs/abp.sweet-alert.js"></script>
<script src="Abp/Framework/scripts/libs/angularjs/abp.ng.js"></script>
<script src="Scripts/jquery.signalR-2.2.1.min.js"></script>
<script src="api/AbpServiceProxies/GetAll?v=636475780135774228"></script>
<script src="api/AbpServiceProxies/GetAll?type=angular&v=636475780135774228"></script>
<script src="AbpScripts/GetScripts?v=636475780135774228" type="text/javascript"></script>
并使用 getAll
方法,例如:
<script>
var securityService = abp.services.remotesystem.security;
securityService.getAll().done(function (data) {
for (var i in data)
console.log(data[i].username);
});
</script>
我认为使用自动生成服务的重要人员是:
<script src="api/AbpServiceProxies/GetAll?v=636475780135774228"></script>
<script src="api/AbpServiceProxies/GetAll?type=angular&v=636475780135774228"></script>
<script src="AbpScripts/GetScripts?v=636475780135774228" type="text/javascript"></script>
感谢您的关注。
AssetApplicationService 必须由 IApplicationService 实现,然后检查您的模块是否正确加载并在其他模块中添加正确的依赖项。
检查此 link。它对我有用。
我知道之前有人问过 abp.services
方法。
假设我有:
public interface ISecurityAppService : IApplicationService
{
List<PacsUser_C_Extented> GetAll();
}
public class SecurityAppService : ApplicationService, ISecurityAppService
{
public List<PacsUser_C_Extented> GetAll()
{
// ...
return allUsers;
}
}
所有样板服务都将很好地注册为:
public class Global : AbpWebApplication<ImmenseWebModule>
{
protected override void Application_Start(object sender, EventArgs e)
{
base.Application_Start(sender, e);
}
}
正如 ASP.NET Boilerplate
文档所说,为了能够使用自动生成的服务,您应该在页面中包含所需的脚本,例如:
<script src="~/Abp/Framework/scripts/libs/angularjs/abp.ng.js"></script>
<script src="~/api/AbpServiceProxies/GetAll?type=angular"></script>
我知道第二行说要使用 angular
控制器,但我将其更改为:
<script src="~/api/AbpServiceProxies/GetAll?v=@(Clock.Now.Ticks)">script>
...仍然没有任何效果。
当我想在 ASP.NET Web 表单的 JavaScript 代码中使用 getAll
时,它会给我:
abp.service is not defined
那么如何在脚本元素 <script>...</script>
中使用 getAll
或 SecurityAppService
中的其他方法——而不是 Angular?
提前致谢。
更新
当我使用 Angular 控制器和 MVC 部分视图时,如:
(function () {
var app = angular.module('app');
var controllerId = 'sts.views.security.list';
app.controller(controllerId, [
'$scope', 'abp.services.remotesystem.security',
function ($scope, securityService) {
var vm = this;
vm.localize = abp.localization.getSource('ImmenseSystem');
vm.users = [];
vm.refreshUserList = function () {
abp.ui.setBusy( // Set whole page busy until getTasks completes
null,
securityService.getAll().success(function (data) {
vm.users = data;
abp.notify.info(vm.localize('UserListLoaded'));
})
);
};
vm.refreshUserList();
}
]);
})();
我可以使用那个功能。 但我想在 ASP.NET Web 表单页面的 JavaScript 中使用它。
您正在注射 abp.services.remotesystem.security。 所以你可以使用这个命名空间来访问函数。打开 chrome 控制台并写入 abp.services.remotesystem.security 你会看到函数
最后我通过以下简单的方法解决了问题...
1- 运行 项目并通过 Angular 和局部视图 (MVC) 使用该样板服务 像有问题的更新部分。
2- 运行 并重定向到视图后,我转到 View page source
并查看依赖脚本。
3- 我将以下脚本源复制到一个页面:
<script src="Scripts/jquery-2.2.0.min.js"></script>
<script src="Scripts/jquery-ui-1.11.4.min.js"></script>
<script src="Scripts/jquery.validate.min.js"></script>
<script src="Scripts/modernizr-2.8.3.js"></script>
<script src="Abp/Framework/scripts/utils/ie10fix.js"></script>
<script src="Scripts/json2.min.js"></script>
<script src="Scripts/bootstrap.min.js"></script>
<script src="Scripts/moment-with-locales.min.js"></script>
<script src="Scripts/jquery.blockUI.js"></script>
<script src="Scripts/toastr.min.js"></script>
<script src="Scripts/sweetalert/sweet-alert.min.js"></script>
<script src="Scripts/others/spinjs/spin.js"></script>
<script src="Scripts/others/spinjs/jquery.spin.js"></script>
<script src="Scripts/angular.min.js"></script>
<script src="Scripts/angular-animate.min.js"></script>
<script src="Scripts/angular-sanitize.min.js"></script>
<script src="Scripts/angular-ui-router.min.js"></script>
<script src="Scripts/angular-ui/ui-bootstrap.min.js"></script>
<script src="Scripts/angular-ui/ui-bootstrap-tpls.min.js"></script>
<script src="Scripts/angular-ui/ui-utils.min.js"></script>
<script src="Abp/Framework/scripts/abp.js"></script>
<script src="Abp/Framework/scripts/libs/abp.jquery.js"></script>
<script src="Abp/Framework/scripts/libs/abp.toastr.js"></script>
<script src="Abp/Framework/scripts/libs/abp.blockUI.js"></script>
<script src="Abp/Framework/scripts/libs/abp.spin.js"></script>
<script src="Abp/Framework/scripts/libs/abp.sweet-alert.js"></script>
<script src="Abp/Framework/scripts/libs/angularjs/abp.ng.js"></script>
<script src="Scripts/jquery.signalR-2.2.1.min.js"></script>
<script src="api/AbpServiceProxies/GetAll?v=636475780135774228"></script>
<script src="api/AbpServiceProxies/GetAll?type=angular&v=636475780135774228"></script>
<script src="AbpScripts/GetScripts?v=636475780135774228" type="text/javascript"></script>
并使用 getAll
方法,例如:
<script>
var securityService = abp.services.remotesystem.security;
securityService.getAll().done(function (data) {
for (var i in data)
console.log(data[i].username);
});
</script>
我认为使用自动生成服务的重要人员是:
<script src="api/AbpServiceProxies/GetAll?v=636475780135774228"></script>
<script src="api/AbpServiceProxies/GetAll?type=angular&v=636475780135774228"></script>
<script src="AbpScripts/GetScripts?v=636475780135774228" type="text/javascript"></script>
感谢您的关注。
AssetApplicationService 必须由 IApplicationService 实现,然后检查您的模块是否正确加载并在其他模块中添加正确的依赖项。
检查此 link。它对我有用。