Blazor Server下如何从_Host.cshtml的JS调用MainLayout.cs的C#方法
Blazor JS调用MainLayout静态C#方法解决方案
前置检查
你贴的SessionTimeOut方法已经正确添加了[JSInvokable]特性,且为public static类型,符合静态方法JS调用的基础要求,只需额外确认两点:
MainLayout类本身为public访问级别- 记好你项目的程序集名称(可右键项目→属性→应用页查看,和命名空间无必然关联,需完全匹配)
JS端正确调用代码
在_Host.cshtml中写入以下JS逻辑,必须等待Blazor初始化完成后再调用,否则会出现DotNet对象未定义的错误:
// 等待Blazor启动完成后执行调用 window.Blazor.start().then(() => { // 第一个参数填你的项目程序集名称,第二个参数填C#方法名 DotNet.invokeMethodAsync('你的项目程序集名', 'SessionTimeOut') .then(timeout => { // 此处获取返回的7000,自行处理业务逻辑 console.log('获取到的会话超时时间:', timeout); }) .catch(err => { console.error('调用失败:', err); }); });
常见问题排查
如果调用仍然失败,优先排查以下几点:
- 程序集名称大小写完全匹配,不要误填为命名空间
- 方法名大小写完全匹配,若存在方法重载可给
[JSInvokable]指定自定义名称避免冲突,示例:[JSInvokable("GetSessionTimeout")],JS调用时填自定义的名称即可 - 若你的项目是.NET 6+ 开启了增强导航的Blazor Server,可额外绑定增强加载事件,避免页面跳转后逻辑不执行:
Blazor.addEventListener('enhancedload', () => { // 此处重复写上述调用逻辑即可 });
内容的提问来源于stack exchange,提问作者hydeinthesky29
相关产品推荐
相关产品推荐

