我正在尝试将blazor服务器集成到现有的MVC项目中,对于让我的组件调用OnAfterRenderAsync()
的要求有点困惑。
我有以下简单的Index.razor
测试页面,由以下部分组成:
@page "/Index"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
protected override Task OnAfterRenderAsync(bool firstRender)
{
return base.OnAfterRenderAsync(firstRender);
}
private void IncrementCount()
{
currentCount++;
}
}
如果我直接导航到/Index
,那么OnAfterRenderAsync
方法就可以了。但是,如果我像这样将Index.razor
作为cshtml
中的组件呈现:@(await Html.RenderComponentAsync<Index>(RenderMode.ServerPrerendered ))
则OnAfterRenderAsync()
不被命中。
我的Startup.cs
中有MapBlazorHub()
,_Host.cshtml
中有<script src="~/_framework/blazor.server.js"></script>
。
我是否在某个地方错过了一步,或者这种行为是Blazor Server中设计的吗?如果是,是否有一些变通方法?我需要一些可重用的blazor组件,以便能够使用MVC项目中实现的JS库,所以我需要这些组件能够调用OnAfterRenderAsync()
,而无需直接访问页面URL
在检查了开发人员工具中的源代码后,我发现组件中不存在_framework文件夹。尽管我可以导航到https://myurl/_framework/blazor.server.js看到该文件存在于我的项目中,我的组件无法访问它。将脚本标记<script src="~/_framework/blazor.server.js"></script>
直接添加到呈现我的Blazor组件的cshtml文件中解决了我的问题。