Blazorプロジェクト中のRazorページ(.cshtml)等でBlazorコンポーネントを使用したい場合には、どうすればよいのかチョット気になったので調べてみた。
結果としてはTagHelperライブラリの<component>タグを用いるらしい。
詳細はこちらを参照。
componentタグにはレンダリングするTypeとレンダリングの方法を指定する。
(パラメータも指定可能)
おなじみのCounterコンポーネントを使ってみる
@page
@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers
@using blazorApp7.Pages
<html>
<head>
<title>Razorコンポーネントテスト</title>
<link rel="stylesheet" href="css/bootstrap/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" />
<script type="text/javascript" src="~/scripts/project.js"></script>
</head>
<body>
<div class="areabody">
<h3>CSHTMLからBlazorコンポーネントは使えるのか?</h3><br/>
<div class="component-area">
<component type="typeof(Counter)" render-mode="ServerPrerendered"/>
</div>
</div>
<br/>
<hr/>
<div class="areabody">
結論から言うと、Blazor用のJavaScriptおよびその他コンポーネント実行に必要なJavascriptとCSSを読み込めば大丈夫な模様。<br/>
BlazorServerの場合は"_framework/blazor.server.js"<br/>
<script src="_framework/blazor.server.js"></script>
</div>
</body>
</html>
Blazorサーバーの場合はサーバーとの通信がNGになると、ページ全体がダメになるのは仕方ないよね・・・
用途として、動的View的なものに使えないかと思ったけど、Razorページからコンポーネントへのリアルタイム通知ができないとダメだね。無理やり作ろうと思えばできないことは無いけど、やはり単純にBlazor内で完結させた方がよさそうだ。