Ignite UI for Blazor のスナックバーコンポーネント (IgbSnackbar) あるいはトーストコンポーネント (IgbToast) を使うと、簡潔なメッセージ表示やユーザー操作へのフィードバックを行なうができます。
これら IgbSnackbar および IgbToast を、(Blazor WebAssembly ではなく) Blazor Server アプリケーションの上で使用している場合は、メッセージを表示する際、Show() メソッドではなく ShowAsync() 非同期メソッドを呼び出してください。下記は IgbSnackbar によるメッセージ表示の実装例です。
<!-- *.razor --> <IgbSnackbar @ref="_Snackbar">メッセージ</IgbSnackbar> <IgbButton @onclick="OnClickShowMessageAsync">メッセージを表示</IgbButton> @code { private IgbSnackbar? _Snackbar; private async Task OnClickShowMessageAsync() { if (_Snackbar != null) { // ⚠️ Blazor Server では、ShowAsync メソッドで表示を行なうこと await _Snackbar.ShowAsync(); } } }
もしも Blazor Server アプリケーション上で Show メソッドを呼び出してしまうと、下記の実行時例外が発生します (既定では、Web ブラウザの開発者コンソールに下記例外メッセージが表示されます)。
System.InvalidOperationException: cannot synchronously invoke a method without IJSInProcessRuntime at IgniteUI.Blazor.Controls.BaseRendererControl.InvokeMethodHelperSync(String target, String methodName, Object[] arguments, String[] types, ElementReference[] nativeElements) at IgniteUI.Blazor.Controls.BaseRendererControl.InvokeMethodSync(String methodName, Object[] arguments, String[] types, ElementReference[] nativeElements) at IgniteUI.Blazor.Controls.IgbToast.Show()
これは、Blazor Server 上では JavaScript 相互運用機能を同期的に呼び出すことはできない、Blazor Server プラットフォームの制約に基づく挙動です。Blazor WebAssembly 上での使用においては、Show メソッドでも、ShowAsync 非同期メソッドでも、いずれでも正しく機能します。