
【Blazor】 JavaScriptから.NETメソッド呼び出しの方法
- 今回の実装イメージ
- .NET(C#)側のソースコード
- JavaScript側のソースコード
- 動作確認とまとめ
目次
今回の実装イメージ

今回のサンプルコードの実装イメージになります。
まず.NETからJavaScriptのメソッド呼び出します。 呼び出されたJavaScriptのメソッドから、.NET側のメソッドを参照して呼び出す処理を記載します。
.NETからJavaScriptのメソッド呼び出す方法は、以下の記事で説明しています。 よかったら参照してみてください。

JavaScriptを呼び出し方
BlazorでWEB開発は主にHTML, CSS, C#を使用しますが、JavaScriptの利用も避けられない場面がある。JavaScriptをBlazor内で呼び出すためには、IJSRuntimeサービスを利用する。IJSRuntimeを用いることで、C#からJavaScriptの関数を非同期的に実行可能。例として、ボタンクリックでJavaScriptのアラートを表示する方法を説明。BlazorでのJavaScript使用は最小限に留めるべきだが、必要な場面での知識は重要。
更新日:2023/07/19
このような仕組みでコードを書いています。
.NET(C#)側のソースコード

.NET側のソースコードは以下のとおりです。
@page "/javascript-call-dotnet" @inject IJSRuntime JSRuntime <h3>JavaScriptから.NET呼び出し</h3> <button class="btn btn-primary" @onclick="CallJavaScript">JavaScript呼び出しボタン</button> <p>@message</p> @code { /// <summary> /// 画面に表示するメッセージ /// </summary> private static string? message; /// <summary> /// メッセージを取得(JavaScriptから呼び出し可能なメソッド) /// </summary> /// <remarks>staticメソッドである必要あり</remarks> [JSInvokable("GetMessage")] public static Task<string> GetMessage() { return Task.FromResult(".NET -> JavaScript へのメッセージ"); } /// <summary> /// メッセージを更新(JavaScriptから呼び出し可能なメソッド) /// </summary> /// <remarks>staticメソッドである必要あり</remarks> /// <param name="newMessage">更新するメッセージ</param> [JSInvokable("UpdateMessage")] public static Task UpdateMessage(string newMessage) { message = newMessage; return Task.CompletedTask; } /// <summary> /// JavaScriptのメソッド呼び出し /// </summary> private async Task CallJavaScript() { // JavaScriptの"callDotNetMethod"メソッドを呼び出し await JSRuntime.InvokeVoidAsync("callDotNetMethod"); } }
GetMessageとUpdateMessageメソッドはJavaScript側から呼ばれるメソッドです。 JavaScriptから.NETのメソッドを呼び出すには、以下の条件を満たす必要があります。
- JSInvokableを付与されていること
- アクセス修飾子がpublicかつstaticであること
CallJavaScriptメソッドでは、JavaScript側のcallDotNetMethodメソッドを呼び出す処理が書いてあります。 callDotNetMethodメソッドには、.NET側のメソッドを参照して呼び出す処理が書いてあります。
callDotNetMethodメソッドなどのJavaScript側のソースコードは、次のセクションで見ていきます。
JavaScript側のソースコード

JavaScript側のソースコードは以下のとおりです。
async function callDotNetMethod () { // 非同期で .NETメソッドを呼び出し、結果を取得する例 const result = await DotNet.invokeMethodAsync('BlazorJavaScriptCallDotnet', 'GetMessage'); // 取得結果である「.NET -> JavaScript へのメッセージ」がコンソールへ表示されます console.log(result); // 非同期で .NETメソッドにデータ(引数)を渡して呼び出す例 await DotNet.invokeMethodAsync('BlazorJavaScriptCallDotnet', 'UpdateMessage', 'JavaScript -> .NET へのメッセージ'); };
DotNet.invokeMethodAsyncは、メソッドを使って、.NET側のGetMessageメソッドを非同期で呼び出します。 第1引数にはアセンブリ名BlazorJavaScriptCallDotnet、第2引数にはメソッドGetMessageを指定します。
アセンブリ名は、以下の赤枠部分の文字列を指定すれば大丈夫です。

再びDotNet.invokeMethodAsyncメソッドを使って、今度は引数を渡して、.NET側のUpdateMessageメソッドを呼び出します。 第3引数に渡したいデータ("JavaScript -> .NET へのメッセージ"という文字列)を指定します。この操作も非同期で行われます。
動作確認とまとめ

動作確認してみましょう。ボタンクリックして、メッセージが表示されるのを確認してください。

この記事では、JavaScriptからBlazor Serverアプリケーションの.NETメソッドを呼び出す方法について解説しました。
Blazorでは、JavaScriptを利用しないと実装できない機能が多々あるので、 そういった状況になったら是非使ってみてください。
この本では、Blazorの基本から高度なテクニックまで、実際のプロジェクトに役立つ知識を網羅しています。 初心者から経験者まで、Blazorを扱うすべての開発者にとっての必読書です。 この記事の執筆者も参考にした「Blazor入門」で、あなたのBlazorスキルを飛躍的に向上させませんか?
合わせて読みたい

RenderFragmemtの使い方
Blazorでのページ作成時に共通レイアウトの再利用性を高めるため、RenderFragmentを利用する方法を紹介。RenderFragmentを使ったコンポーネントを作成し、その中でChildContentを通してページ固有の内容を指定。これにより、類似のレイアウトを持つページでもコードの重複を防ぎ効率的な実装が可能になる。
更新日:2023/07/09

@refを使い方
Blazorの@refを用いてコンポーネント内のデータやメソッドにアクセスする方法を詳解。@refはBlazorコンポーネント参照のためのディレクティブで、親から子コンポーネントのメソッドやプロパティを操作できる。具体的な使用シナリオとしてフォームバリデーションやモーダルダイアログが挙げられるが、レンダリング後の使用や過度な依存を避けることが推奨される。
更新日:2023/09/05