Использование abp.services в JavaScript в веб-формах ASP.NET

1

Я знаю, что этот вопрос задавали раньше, но мой вопрос касается использования методов abp.services в JavaScript напрямую.

Предположим, что у меня есть:

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>

... все еще ничего не работает.

Когда я хочу использовать getAll в JavaScript-коде ASP.NET, он дает мне:

abp.service не определен

Итак, как я могу использовать getAll или другой метод в SecurityAppService в элементе <script>...</script> - не 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();
        }
    ]);
})();

Я могу использовать эту функцию. Но я хочу использовать это в JavaScript на страницах веб-формы ASP.NET.

  • 0
    abp.service is not defined → Вы забыли s в abp.services ?
  • 0
    @arron Нет s были пропущены, я попробовал abp.services
Теги:
aspnetboilerplate
webforms

3 ответа

0
Лучший ответ

Наконец, я решил это простым способом, как следующие шаги...

1- Запустите проект и используйте эти сервисы с помощью углового и частичного просмотра (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>

Спасибо за внимание.

  • 0
    Хорошо сделано, но я думаю, что некоторые из сценариев не нужны.
  • 0
    Только <script src="api/AbpServiceProxies/GetAll?v=636475780135774228"></script> кажется обязательным. Но вы говорите, что это не работает и нет ошибок.
0

AssetApplicationService должен быть реализован службой IApplicationService, а затем правильно проверить загрузку вашего модуля и добавить правильные зависимости в другие модули, подобные этому.

Проверьте эту ссылку. Это сработало для меня.

  • 0
    Спасибо, я решил это раньше.
0

вы вводите abp.services.remotesystem.security. поэтому вы можете использовать это пространство имен для доступа к функциям. откройте консоль хром и напишите abp.services.remotesystem.security, вы увидите функции

Ещё вопросы

Сообщество Overcoder
Наверх
Меню