首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Blazor:如何在JSInterOP调用后调用StateHasChanged (尝试通过JS resize事件在调整大小后将BwoserResolution获取到Blazor App )?

Blazor 是一个使用 C# 构建客户端 Web 应用程序的开源框架。它允许开发人员使用 C# 语言编写前端代码,并在浏览器中通过 WebAssembly 运行该代码。Blazor 通过 JavaScript Interop(JSInterop)提供了与 JavaScript 的交互能力,可以在需要时调用 JavaScript 函数。

在 Blazor 中,在调用 JSInterop 方法后,可以使用 StateHasChanged 方法来触发组件的重新渲染。StateHasChanged 方法会通知 Blazor 引擎重新计算组件的状态并更新 DOM。

为了在 JSInterop 调用后调用 StateHasChanged 方法,可以采用以下步骤:

  1. 在 Blazor 组件中,使用 @inject 指令注入 IJSRuntime,以便在组件中调用 JavaScript 函数。
代码语言:txt
复制
@inject IJSRuntime JSRuntime
  1. 定义一个 JavaScript 函数,用于在浏览器的 resize 事件触发时获取浏览器分辨率,并将其传递给 Blazor 组件。
代码语言:txt
复制
window.addEventListener('resize', function() {
    var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
    var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
    
    DotNet.invokeMethodAsync('BlazorAppNamespace', 'OnBrowserResize', width, height);
});
  1. 在 Blazor 组件中,编写一个名为 OnBrowserResize 的方法,用于接收浏览器分辨率,并在调用后调用 StateHasChanged 方法。
代码语言:txt
复制
public async Task OnBrowserResize(int width, int height)
{
    // 处理浏览器分辨率的逻辑
    
    await InvokeAsync(StateHasChanged);
}

这样,当浏览器的 resize 事件触发时,JavaScript 函数会调用 Blazor 组件中的 OnBrowserResize 方法,并在调用后触发组件的重新渲染。

Blazor 是一个基于 WebAssembly 的现代 Web 开发框架,可以用于构建富交互的 Web 应用程序。它的主要优势包括:

  • 使用 C# 编写前端代码:开发人员可以在 Blazor 中使用熟悉的 C# 语言来编写前端代码,无需学习 JavaScript 或其他前端技术。
  • 高性能:Blazor 使用 WebAssembly 将 C# 代码编译成原生二进制指令,因此可以获得接近原生性能的执行速度。
  • 组件化开发:Blazor 支持组件化开发模式,可以将复杂的 UI 细分为独立的组件,并以可重用的方式进行开发和使用。
  • 跨平台:Blazor 支持在多个平台上运行,包括 Web、移动端和桌面端。

Blazor 的应用场景包括但不限于:

  • 单页应用程序:使用 Blazor 可以构建功能丰富、交互性强的单页应用程序。
  • 表单验证:Blazor 提供了强大的表单验证功能,可以方便地验证用户输入数据。
  • 实时数据更新:通过与 SignalR 结合使用,Blazor 可以实现实时数据更新和通信。
  • 游戏开发:使用 Blazor 可以开发基于 WebAssembly 的高性能游戏。

推荐的腾讯云相关产品和产品介绍链接地址:

请注意,以上仅为腾讯云提供的一些相关产品,其他云计算品牌商也提供类似的产品和服务,可以根据实际需求选择适合的云计算平台和工具。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【炫丽】从0开始做一个WPF+Blazor对话小程序

本文演示如何在WPF中使用Blazor开发漂亮的UI,为客户端开发注入新活力。...();4.5 尝试Masa.Blazor案例上面4步的准备工作做好,我们简单来使用下Masa.Blazor组件。...再尝试把Tab移到标题栏,前面有提过的效果:上面的效果,代码修改如下,删除了原标题栏代码,窗体操作按钮放到了MToolbar里面,并使用MToolbar添加了双击事件、鼠标按下、释放事件实现窗体拖动:...没引入Masa.Blazor之前,右侧正常显示,引入多了一个竖直滚动条:这个想去掉也简单,wwwroot\css\app.css追加样式(当时也是折腾了好一会儿,最后Masa.Blazor群里群友给出了解决方案...,收到变量_showComfirmDialog置为true,即上面对话框的属性Visible绑定的值,同理需要在InvokeAsync()中处理数据接收,也需要调用StateHasChanged通知

8.1K60
  • 【炫丽】从0开始做一个WPF+Blazor对话小程序

    WPF与Razor组件之间通过Ioc数据传输 上面步骤做完,运行程序: WPF集成Blazor的默认程序 OK,WPF与Blazor集成成功,打完收工?...(); Ioc中添加Masa Blazor 4.5 尝试Masa.Blazor案例 上面4步的准备工作做好,我们简单来使用下Masa.Blazor组件。...再尝试把Tab移到标题栏,前面有提过的效果: Tab放标题栏 上面的效果,代码修改如下,删除了原标题栏代码,窗体操作按钮放到了MToolbar里面,并使用MToolbar添加了双击事件、鼠标按下、...没引入Masa.Blazor之前,右侧正常显示,引入多了一个竖直滚动条: 引入Masa.Blazor多了竖直滚动条 这个想去掉也简单,wwwroot\css\app.css追加样式(当时也是折腾了好一会儿...,也需要调用StateHasChanged通知UI数据变化。

    10.3K20

    如何使用 Blazor 框架在前端浏览器中导入和导出 Excel

    一个常见的用例是现有的 Excel 文件导入 Blazor 应用程序,电子表格数据呈现给用户,并且能够允许进行任何更改,最后将该数据导出回 Excel 文件或将其保存到数据库。...以下是 Blazor 中导入/导出电子表格文件的步骤: 创建 SpreadJS Blazor 组件 创建 Blazor 应用程序 Blazor 应用程序中导入 Excel Blazor 应用程序中的... SpreadJS 放入 Blazor 应用程序之前,我们必须首先创建一个 Blazor 组件来包含 SpreadJS。...要创建组件,首先要创建一个 Razor 类库: 为简单起见,您可以将其命名为“SpreadJS_Blazor_Lib”: 创建项目,我们需要将 SpreadJS 文件复制到“wwwroot”文件夹...Blazor 应用程序中运行 SpreadJS 所需的全部内容: Blazor Excel 导入 前面的代码只是 SpreadJS Blazor 应用程序中的基本用法,但我们可以通过包含一些 Excel

    29520

    .NET周刊【12月第1期 2023-12-06】

    配置,首次启动应用时会有符号加载时间。通过这些设置,可以"调用堆栈"窗口中下载和加载符号进行源码调试。文章还建议通过实践提升调试技巧,以便更好地理解框架工作原理和提高解决 BUG 的效率。...通过示例展示了结构体成员设为只读后,尝试修改其字段值时,编译器不报错但修改不成功,因为只读机制会导致字段值堆栈上拷贝。这种隐蔽的行为可能引发 BUG,自旋锁示例中的计数错误。...IIS 请求队列是处理前临时存放请求的地方,监控请求队列的性能计数器有助于优化队列设置,增加工作进程数、优化代码和调整队列长度,以减少等待时间,确保请求快速处理。...了解如何在 .NET 8 中的 Blazor Web App 中实现 Google OAuth 身份验证。...-jsinterop 了解如何在 .NET 8 中将静态服务器渲染 (SSR) 与 Blazor 结合使用时实现和运行自定义 JavaScript。

    24310

    结合使用 C# 和 Blazor 进行全栈开发

    展示如何在 Blazor 客户端和 WebAPI 服务器应用程序之间共享验证逻辑。目前,你不仅要在服务器中验证输入,还要在客户端浏览器中验证输入。新式 Web 应用程序的用户希望获得准实时反馈。...填写长窗体并单击“提交”仅看到红色错误返回的日子已经一去不复返了。 浏览器中运行的 Blazor Web 应用程序可以与 C# 后端服务器共享代码。可以逻辑放入共享库中,并在前端和后端使用它。...若要尝试解决这种不匹配问题,需要涉及复杂的规则框架和额外的抽象层。使用 Blazor,可以客户端和服务器上运行同一 .NET Core 库。 虽然 Blazor 仍是试验框架,但它的进展迅速。...找到 IModelRule ,它调用 Validate 方法,并返回结果,如图 3 所示。...它绑定到 ModelChanged 事件,并调用 CheckRules 方法来验证规则。ModelChanged 处理程序调用 base.StateHasChanged 方法,以强制执行 UI 刷新。

    6.7K40

    .NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新

    app.UseBlazor()的调用,换成app.UseRouting()调用之前调用app.UseClientSideBlazorFiles()的方式。...事件处理程序 Blazor中指定事件处理程序现在使用新的指令属性语法而不是普通的HTML语法。语法类似于HTML语法,但现在具有前导@字符。这使得C#事件处理程序与JS事件处理程序不同。...然后,可以通过引用Razor类库项目或通过包引用这些静态资产包含在ASP.NET Core应用程序中。...在这个版本中,我们已经withAutomaticReconnect()方法添加到了HubConnectionBuilder。默认情况下,客户端尝试立即重新连接,并在2、10和30秒重新连接。...如果30秒重新连接失败(或您设置的最大值),客户端会假定连接处于脱机状态,并停止尝试重新连接。在这些重新连接尝试期间,您将希望更新应用程序UI,以向用户提供尝试重新连接的提示。

    6.7K20

    Dotnet9网站回归Blazor重构,访问速度飞快,交互也更便利了!

    其次,Razor PagesSEO(搜索引擎优化)方面具有一定的优势。由于Razor Pages视图和处理逻辑封装在同一个页面中,搜索引擎可以更容易地理解和索引页面的内容。...其次,Blazor提供了更好的性能和用户体验,Blazor提供了客户端和服务端两种模式(Blazor混合模式有机会我们再谈): 客户端模式:Blazor使用WebAssembly技术,浏览器中直接运行编译的二进制代码...开发人员可以使用Blazor与现有的JavaScript库和框架进行集成,React、Vue.js等。...中添加了Razor 组件尝试,微软确实牛逼,旨在使 Blazor 组件能够满足客户端和服务器端的所有 Web UI 需求。。...Blazor的交互便利:带来几个在线工具 对于页面的事件处理,使用Blazor就方便了,下面是昨晚加的4个小工具: 4.1.

    52430

    .NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新

    app.UseBlazor()的调用,换成app.UseRouting()调用之前调用app.UseClientSideBlazorFiles()的方式。...事件处理程序 Blazor中指定事件处理程序现在使用新的指令属性语法而不是普通的HTML语法。语法类似于HTML语法,但现在具有前导@字符。这使得C#事件处理程序与JS事件处理程序不同。...然后,可以通过引用Razor类库项目或通过包引用这些静态资产包含在ASP.NET Core应用程序中。...在这个版本中,我们已经withAutomaticReconnect()方法添加到了HubConnectionBuilder。默认情况下,客户端尝试立即重新连接,并在2、10和30秒重新连接。...如果30秒重新连接失败(或您设置的最大值),客户端会假定连接处于脱机状态,并停止尝试重新连接。在这些重新连接尝试期间,您将希望更新应用程序UI,以向用户提供尝试重新连接的提示。

    6K20

    Blazor WebAssembly 修仙之途 - 初尝

    Blazor Server 组件呈现逻辑从 UI 更新的应用方式中分离出来。 Blazor Server ASP.NET Core 应用中添加了对服务器上托管 Razor 组件的支持。...可通过 SignalR 连接处理 UI 更新。运行时处理从浏览器向服务器发送 UI 事件,并在运行组件服务器发送的 UI 更新并重新应用到浏览器。...Blazor Server 执行业务代码逻辑是通过 SignalR 发送事件到服务端,服务端执行代码,再返回结果,根据返回的数据渲染UI,应用更新,通过下图可以看到。 ?...然后 Razor 组件中注入 JSRuntime,并调用JS: @page "/counter" @inject IJSRuntime JsRuntime GUID 生成器 <...五.结束 Blazor WebAssembly 的初次尝试到此就结束了,一直等正式版,到现在终于等到了,我也是才是学习它,后面陆续会出一些分享文章,希望可以与大家一起学习进步。

    3.5K10

    「译」 用 Blazor WebAssembly 实现微前端

    ,比如,只有用户导航到该组件时,才开始加载单个组件的程序集,加载,程序集缓存在客户端,可用于以后的所有导航。...打开我们的 Blazor 项目,然后修改项目 .csproj 文件,在这里标记需要延迟加载的 dll 类型的程序集,然后 Blazor 启动就不会加载这个程序集,我下边的代码中标记了 WaelsMagicFeature.dll...Blazor 的路由组件指定搜索可以访问的路由组件的程序集,当用户访问到路由菜单,路由组件也负责渲染,应用的路由组件(App.razor) 添加一个 OnNavigateAsync 的回,当用户第一次直接从浏览器导航到路由时...内部,实现了要指定加载哪些程序集,Options 包含了一个OnNavigateAsync方法内部的条件检查,路由映射到程序集名称的查找表中,这些名称可以注入到组件中,也可以代码内实现。...JS发起了网络调用,获取程序集然后加载到浏览器中的WebAssembly上执行的运行时中。

    2.7K20

    Blazor WebAssembly 实现微前端

    ,比如,只有用户导航到该组件时,才开始加载单个组件的程序集,加载,程序集缓存在客户端,可用于以后的所有导航。...打开我们的 Blazor 项目,然后修改项目 .csproj 文件,在这里标记需要延迟加载的 dll 类型的程序集,然后 Blazor 启动就不会加载这个程序集,我下边的代码中标记了 WaelsMagicFeature.dll...Blazor 的路由组件指定搜索可以访问的路由组件的程序集,当用户访问到路由菜单,路由组件也负责渲染,应用的路由组件(App.razor) 添加一个 OnNavigateAsync 的回,当用户第一次直接从浏览器导航到路由时...内部,实现了要指定加载哪些程序集,Options 包含了一个OnNavigateAsync方法内部的条件检查,路由映射到程序集名称的查找表中,这些名称可以注入到组件中,也可以代码内实现。...JS发起了网络调用,获取程序集然后加载到浏览器中的WebAssembly上执行的运行时中。

    3K00

    【译】.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容

    改进事件处理 新的eventcallback和eventcallback类型使得定义组件回更加简单。...因此,不需要在ShowMessage事件处理程序中显式调用StateHasChanged。...因此,不需要在ShowMessage事件处理程序中显式调用StateHasChanged。...它旨在支持ASP.NET Core的生产力功能,日志记录,DI,配置等,而不承载任何Web依赖项。 ? 接下来的几天里,我们发布一些博客文章,提供更多关于使用Worker模板入门的练习。...注册为新用户,我们将被重定向回应用程序,在那里我们可以看到我们成功地通过了身份验证。 ? 调用经过身份验证的API 如果我们点击获取数据,我们可以看到天气预报数据列表 ?

    22.6K10

    集成Ids4,实现统一授权认证

    最终呢,不负众望,实现了Blazor.Server集成到了Ids4的统一认证平台上,如果你用的是Blazor.wasm,基本差不多,甚至更简单,等你有实战项目了就知道了。...这里先说明一下,因为毕竟是集成Ids4,涉及的知识会比较多,比如如何使用oidc-client、如何c#调用js事件、如何封装service模块,不过本文就不过多的对这几个知识点讲解原理了,先列出来操作步骤和代码...3、C#调用js方法模块 是不是如果你看到这个逻辑都很怪异,我们都知道c#和js完全就不是一个逻辑,那是如何相互调用的呢,不仅c#可以使用js方法,我们也同样能在js里去调用c#代码,当然这是Blazor...(); } } 是不是很简单,这样就直接可以c#中,调用js脚本方法了,但是这个js方法任意写function就行了么,并不是。...4、调用service模块 不知道大家还记得不记得,之前的简单的鉴权中,我是通过一个input输入框,手动输入token的方案,还是很low的: 那现在我们就不需要手动配置了,用了ids4,一切都是自动的

    2.1K20
    领券