ASP.NET Core MVC / Razor Pages: Page Alerts

It is common to show error, warning or information alerts to inform the user. An example Service Interruption alert is shown below:

page-alert-example

Basic Usage

If you directly or indirectly inherit from AbpPageModel, you can use the Alerts property to add alerts to be rendered after the request completes.

Example: Show a Warning alert

namespace MyProject.Web.Pages
{
    public class IndexModel : MyProjectPageModel //or inherit from AbpPageModel
    {
        public void OnGet()
        {
            Alerts.Warning(
                text: "We will have a service interruption between 02:00 AM and 04:00 AM at October 23, 2023!",
                title: "Service Interruption"
            );
        }
    }
}

This usage renders an alert that was shown above. If you need to localize the messages, you can always use the standard localization system.

Exceptions / Invalid Model States

It is typical to show alerts when you manually handle exceptions (with try/catch statements) or want to handle !ModelState.IsValid case and warn the user. For example, the Account Module shows a warning if user enters an incorrect username or password:

page-alert-account-layout

Note that you generally don't need to manually handle exceptions since ABP Framework provides an automatic exception handling system.

Alert Types

Warning is used to show a warning alert. Other common methods are Info, Danger and Success.

Beside the standard methods, you can use the Alerts.Add method by passing an AlertType enum with one of these values: Default, Primary, Secondary, Success, Danger, Warning, Info, Light, Dark.

Dismissible

All alert methods gets an optional dismissible parameter. Default value is true which makes the alert box dismissible. Set it to false to create a sticky alert box.

IAlertManager

If you need to add alert messages from another part of your code, you can inject the IAlertManager service and use its Alerts list.

Example: Inject the IAlertManager

using Volo.Abp.AspNetCore.Mvc.UI.Alerts;
using Volo.Abp.DependencyInjection;

namespace MyProject.Web.Pages
{
    public class MyService : ITransientDependency
    {
        private readonly IAlertManager _alertManager;

        public MyService(IAlertManager alertManager)
        {
            _alertManager = alertManager;
        }

        public void Test()
        {
            _alertManager.Alerts.Add(AlertType.Danger, "Test message!");
        }
    }
}

Notes

AJAX Requests

Page Alert system was designed to be used in a regular full page request. It is not for AJAX/partial requests. The alerts are rendered in the page layout, so a full page refresh is needed.

For AJAX requests, it is more proper to throw exceptions (e.g. UserFriendlyException). See the exception handling document.

In this document