
Blazor Server 应用中使用 Blazorise 组件时,Clicked 事件未响应,通常是因为启用了默认的静态服务器端渲染(Static SSR)模式,导致交互逻辑未激活;需显式配置 @rendermode 为 InteractiveServer。
blazor server 应用中使用 blazorise 组件时,`clicked` 事件未响应,通常是因为启用了默认的静态服务器端渲染(static ssr)模式,导致交互逻辑未激活;需显式配置 `@rendermode` 为 `interactiveserver`。
在 Blazor 8 及更高版本中,新项目默认采用 多渲染模式(Multiple Render Modes),其中页面或组件若未显式声明 @rendermode,将按 RenderMode.Static(即静态 SSR)执行——此时 HTML 完全静态生成,无 SignalR 连接,所有事件处理(如 Clicked、@onclick)和 JS 互操作均不会生效。
你提供的代码逻辑完全正确:<button clicked="OnUniClick"></button> 符合 Blazorise API 规范,OnUniClick 是 async Task 方法,且已注入 IJSRuntime,问题根源不在语法或调用方式,而在于渲染上下文缺失交互能力。
✅ 正确做法:在使用交互式组件的 .razor 文件顶部添加渲染模式声明:
@rendermode InteractiveServer
@inject IJSRuntime _runtime
<Button Clicked="OnUniClick">
<Figure Size="FigureSize.Is128x128" Rounded>
<FigureImage Source="@Logo" AlternateText="@Name" />
<FigureCaption>@Name</FigureCaption>
</Figure>
</Button>
@code {
[Parameter]
public string Logo { get; set; }
[Parameter]
public string Name { get; set; }
public async Task OnUniClick()
{
Console.WriteLine("Clicked"); // 将输出到服务器控制台
await _runtime.InvokeVoidAsync("alert", "This is a test alert");
}
}⚠️ 注意事项:
"jQuery点击事件遮罩弹出层可移动特效代码下载。一款jquery弹出层插件制作注册表单点击按钮弹出层表单提交效果,可支持拖到的jQuery弹出层效果。标题、高度、宽度等可以自定义弹出层js插件。
-
InteractiveServer是 Blazor Server 的标准交互模式,依赖 SignalR 实时连接,确保_runtime.InvokeVoidAsync等 JS 互操作可用; - 若该组件被嵌套在
@rendermode Static的父组件中,子组件的InteractiveServer声明仍有效(Blazor 支持混合渲染模式),但父组件自身不可交互; - 检查
App.razor中<routes></routes>是否包裹在@rendermode InteractiveServer下(推荐全局设置),例如:
<!-- App.razor -->
<Router AppAssembly="@typeof(App).Assembly">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
<FocusOnNavigate RouteData="@routeData" Selector="h1" />
</Found>
<NotFound>
<PageTitle>Not found</PageTitle>
<LayoutView Layout="@typeof(MainLayout)">
<p role="alert">Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>应改为:
@rendermode InteractiveServer <!-- 其余内容不变 -->
? 补充验证:可在浏览器开发者工具的 Network 标签页中观察是否存在 /_blazor SignalR 连接(WebSocket 或 Long Polling);若无连接,则确认 Program.cs 中已注册服务并启用终端节点:
// Program.cs
builder.Services.AddCascadingAuthenticationState();
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents(); // ✅ 关键:启用 Server 交互支持
var app = builder.Build();
app.UseAntiforgery(); // 如需表单防伪
app.UseRouting();
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode(); // ✅ 关键:映射交互式 Server 渲染完成上述配置后,点击按钮即可正常触发 OnUniClick,控制台打印日志,并弹出 JavaScript alert。这是 Blazor 8+ 渲染模型升级后的标准实践,而非框架 Bug 或组件缺陷。

















