aspnetboilerplate/aspnetboilerplate · warning

abp.message.info is not implemented!

Error message

abp.message.info is not implemented!

What it means

abp.message.info is a stub in base abp.js. The framework defines the message API but leaves the actual UI to an adapter (e.g. abp.sweet-alert.js). Calling it logs this warning, shows a native alert() via showMessage, and returns a resolved jQuery Deferred (or null without jQuery).

Solutions

  1. Include abp.sweet-alert.min.js (or abp.toastr variant) after abp.js.
  2. Verify script order so the adapter overrides the stub.
  3. Or override manually: abp.message.info = function (m, t, o) { return abp.libs.toastr.info(m, t, o); };

Example fix

// before
abp.message.info('Saved!'); // alert + warning logged
// after
<script src="abp.js"></script>
<script src="abp.sweet-alert.min.js"></script>
abp.message.info('Saved!'); // sweet-alert dialog
Defensive patterns

Strategy: fallback

Validate before calling

if (/not implemented/.test(String(abp.message.info))) { console.warn('abp.message adapter missing — falling back to alert'); }

Type guard

function hasMessageAdapter() { return typeof abp.message.info === 'function' && !/not implemented/.test(String(abp.message.info)); }

Try / catch

try { abp.message.info(msg).done(cb); } catch (e) { alert(msg); cb && cb(); }

Prevention

When it happens

Trigger: Calling abp.message.info(message, title, options) without a message adapter overriding the stub.

Common situations: Missing abp.sweet-alert.min.js include; adapter loaded before abp.js so abp.js's stub overwrites it; AJAX-layer abp.message.info fallbacks firing in apps that never included the adapter.

Related errors


AI-assisted analysis of aspnetboilerplate/aspnetboilerplate@2323c13a15 (2026-09-08). Data as JSON: /api/errors/ec394e7c3c4316a6. Report an issue: GitHub.

Appendix: source

Thrown at src/Abp.Web.Resources/Abp/Framework/scripts/abp.js:443

      //Defines Message API, not implements it

      abp.message = abp.message || {};

    var showMessage = function (message, title, options) {
        alert((title || '') + ' ' + message);

        if (!$) {
          abp.log.warn('abp.message can not return promise since jQuery is not defined!');
          return null;
        }

        return $.Deferred(function ($dfd) {
          $dfd.resolve();
        });
      };

    abp.message.info = function (message, title, options) {
        abp.log.warn('abp.message.info is not implemented!');
        return showMessage(message, title, options);
    };

    abp.message.success = function (message, title, options) {
        abp.log.warn('abp.message.success is not implemented!');
        return showMessage(message, title, options);
    };

    abp.message.warn = function (message, title, options) {
        abp.log.warn('abp.message.warn is not implemented!');
        return showMessage(message, title, options);
    };

    abp.message.error = function (message, title, options) {
        abp.log.warn('abp.message.error is not implemented!');
        return showMessage(message, title, options);
    };

View on GitHub (pinned to 2323c13a15)