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 非同期メソッドでも、いずれでも正しく機能します。

製品について

Ignite UI for Blazor