You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:45:00