Blazor アプリで Bootstrap5 の Modal を使う方法を書きます。この記事では Visaul Studio 2022 のテンプレートで作った .NET 6.0 の Blazor Web Assembly を例に使います。(Blazor Server でもほぼ同じようにしてできます)

Bootstrap5 Modal の詳しい説明は Bootstrap のドキュメント「Modal (モーダル)」にあります。普通の html + css + javascript のページに Bootstrap5 Modal を組み込むなら、そのドキュメントから十分な情報が得られると思います。
JavaScript のメソッドを呼び出すのがいろいろややこしい Blazor アプリに、Bootstrap5 Modal を組み込むにはどうしたらいいかというのががこの記事のポイントで、それを以下に述べます。
Visaul Studio 2022 のテンプレートで作った .NET 6.0 の Blazor アプリには bootstrap.min.css v5.1.0 が組み込み済みです。ただし、それだけでは Modal は使えません。使うには bootstrap.js が必要なので同じバージョンのものを wwwroot 下に追加します。
加えて、JavaScript で Modal を表示するためのコードを含んだ外部スクリプトファイルを作成します。内容は以下の通りです。Bootstrap のドキュメント「Via JavaScript」を参考にしました。ファイル名は exampleJsInterop.js としています (名前は任意)。
window.showBootstrapModal = () => {
// staticBackdrop は modal 表示する div 要素の id
let divModal = document.getElementById('staticBackdrop');
let myModal = new bootstrap.Modal(divModal);
myModal.show();
}
(2024/12/26 追記: JavaScript で Modal を閉じる例をこの記事の下の方に追記しました)
Modal を表示するには、Bootstrap のドキュメント「Via data attributes」に書かれているように、表示に必要な属性を付与した button のような要素を使う方法もあります。その方法で良ければ、上のスクリプトファイル exampleJsInterop.js は不要です。ただし、その場合でも bootstrap.js は必要ですので注意してください。
bootstrap.js ファイルと exampleJsInterop.js ファイルを wwwroot 下に配置し、wwwroot/index.html にそのファイルへの参照を追加します。下の画像の赤枠を見てください。青枠は既存の bootstrap.min.css のものです。

Bootstrap5 は jQuery に依存していないそうですので jquery.js は不要です。(上の画像では jquery.js も追加されていますが、Bootstrap5 とは関係ない別の目的です)
Blazor Sever の場合、外部スクリプトファイル bootstrap.js と exampleJsInterop.js への参照を追加するのは Pages/_Layout.cshtml になります。そこだけが Blazor Web Assembly と Blazor Server の違いです。
Pages フォルダ下に Razor コンポーネントを追加し、それに Bootstrap のドキュメント「Live demo」のコードをコピーします。それだけで[Launch static backdrop modal]ボタンをクリックすると Modal が表示されるようになります。

JavaScript で Modal を表示するには、外部スクリプトファイル exampleJsInterop.js の showBootstrapModal メソッドを呼び出してやります。それを含めた Razor コンポーネント全体のコードは以下のようになります。
[Via JavaScript]ボタンに設定した @onclick="ShowBootstrapModal" で @code 内の ShowBootstrapModal メソッドを呼び出し、その中の InvokeVoidAsync メソッドで showBootstrapModal メソッドを呼び出しています。
@page "/modal"
@inject IJSRuntime JSRuntime;
<PageTitle>Bootstrap Modal</PageTitle>
<!-- Modal -->
<div class="modal fade"
id="staticBackdrop"
data-bs-backdrop="static"
data-bs-keyboard="false" tabindex="-1"
aria-labelledby="staticBackdropLabel"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"
id="staticBackdropLabel">
Modal title
</h5>
<button type="button"
class="btn-close"
data-bs-dismiss="modal"
aria-label="Close">
</button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button"
class="btn btn-secondary"
data-bs-dismiss="modal">
Close
</button>
<button type="button"
class="btn btn-primary">
Understood
</button>
</div>
</div>
</div>
</div>
<h1>Bootstrap Modal</h1>
<!-- Via JavaScript -->
<button type="button" class="btn btn-primary"
@onclick="ShowBootstrapModal">
Via JavaScript
</button>
<br />
<br />
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary"
data-bs-toggle="modal"
data-bs-target="#staticBackdrop">
Launch static backdrop modal
</button>
@code {
private async Task ShowBootstrapModal()
{
await JSRuntime
.InvokeVoidAsync("showBootstrapModal");
}
}
JavaScript のメソッドを呼び出す方法の詳細は Microsoft のドキュメント「ASP.NET Core Blazor で .NET メソッドから JavaScript 関数を呼び出す」に書かれていますので興味がありましたら読んでください。
2024/12/26 追記
.NET 9.0 の Blazor Web Assembly でしか試してませんが、JavaScript で Modal を閉じるための外部スクリプトファイルのコード例を追記しておきます。
let myModal;
window.showBootstrapModal = () => {
// staticBackdrop は modal 表示する div 要素の id
let divModal = document.getElementById('staticBackdrop');
myModal = new bootstrap.Modal(divModal);
myModal.show();
}
window.closeBootstrapModal = () => {
if (myModal != undefined) {
myModal.hide();
}
}
上の closeBootstrapModal メソッドは Razor コンポーネントの @code { ... } 内で以下の様な C# のメソッドで起動できます。
private async Task CloseBootstrapModal()
{
await JSRuntime.InvokeVoidAsync("closeBootstrapModal");
}
ただし、一旦 JavaScript で開いてからでないと変数 myModal は undefined のままなので、上の例で最初に [Launch static backdrop modal] ボタンで開いた Modal は閉じることができませんので注意してください。