【问题标题】:Use abp.services in JavaScript in ASP.NET Web Forms在 ASP.NET Web 窗体中使用 JavaScript 中的 abp.services
【发布时间】:2017-11-29 15:05:56
【问题描述】:

我知道之前有人问过this question,但我的问题是关于在 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 未定义

那么我如何在脚本元素&lt;script&gt;...&lt;/script&gt; 中使用getAllSecurityAppService 中的其他方法——而不是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.service is not defined → 你忘了abp.services中的s吗?
  • @arron No s 被错过了,我试过 abp.services

标签: javascript asp.net webforms aspnetboilerplate


【解决方案1】:

最后我按照以下步骤通过简单的方式解决了它......

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&amp;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&amp;v=636475780135774228"></script>
<script src="AbpScripts/GetScripts?v=636475780135774228" type="text/javascript"></script>

感谢您的关注。

【讨论】:

  • 好的,但是我觉得有些脚本是不必要的。
  • 似乎只需要&lt;script src="api/AbpServiceProxies/GetAll?v=636475780135774228"&gt;&lt;/script&gt;。但是你说它不起作用,没有错误。
【解决方案2】:

您正在注入 abp.services.remotesystem.security。 所以你可以使用这个命名空间来访问函数。打开 chrome 控制台并编写 abp.services.remotesystem.security 你会看到功能

【讨论】:

    【解决方案3】:

    AssetApplicationService 必须由 IApplicationService 实现,然后检查你的模块加载是否正确,并在其他模块中添加正确的依赖项。

    检查此link。它对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 2021-03-08
      • 2019-08-09
      • 2017-06-28
      相关资源
      最近更新 更多