问题标签 [blazor-jsinterop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
232 浏览

components - Blazor 组件(在库中)和 JSInterop

我在一个完整的 Blazor 项目中创建了一个 Blazor 组件,并且一切正常。但是,当我将此组件移动到它自己的 Razor 类库项目时,我现在收到一个错误,即在与服务器建立连接之前我无法使用 JSInterop。我在 OnAfterRenderAsync() 方法中运行我的代码。

进行更改时,我不得不稍微更改代码。在完整的 Blazor 项目中,在 Startup 类中通过 DI 为您提供了 JSInterop。但是对于 calss 库,情况并非如此。

因此,我不得不像这样设置它,而不是页面中的“@inject JSInterop js” -

从网络上提供的粗略细节来看,我假设这从父项目获取服务。

使用调试,我可以看到 js 不为空。它似乎已设置为有效对象。

谁能指出我正确的方向?

0 投票
2 回答
2471 浏览

blazor - 程序集不包含具有 [JSInvokableAttribute] 的公共可调用方法

我们使用 Blazor WebAssembly,我想通过 JavaScript 在我的 Index.razor-File 中调用一个非静态方法。

JavaScript:

索引剃刀:

当我通过按键执行代码时,Microsoft Edge 中的开发人员工具向我显示以下错误:

blazor.webassembly.js:1 System.ArgumentException:程序集“MyBlazorWebAssemblyApp.Client”不包含具有 [JSInvokableAttribute("MyMethod")] 的公共可调用方法。

当我替换该属性时[JSInvokable][JSInvokableAttribute("MyMethod")]会出现相同的错误。

我该如何解决这个问题?

0 投票
1 回答
466 浏览

blazor - 在 Blazor JSInterop 中保留大小写?

我有在 ASP.NET Core 服务器和 Javascript 之间发送的这些数据结构。数据以使用 websocket 消息序列化的 JSON 格式发送。

在此示例中,对象具有名称为Text(Uppercase T)的参数

最终的 JS 对象:

在引入 Blazor WebAssembly 之后,它使用 ClientWebSocket 直接与服务器对话

问题,我的问题来自 JSInterop。

最终的 JS 对象:

现在该Text属性的名称text全部为小写。

如何配置对象序列化以保留 C# 对象的大小写?

解决方法

当前的解决方法是在通过 JSInterop 传递对象之前对其进行序列化,然后运行 ​​JSON.parse 以取回对象。

C#

JavaScript

0 投票
2 回答
2396 浏览

blazor - JSRuntime 未注册 Blazor

我有一个 Blazor Wasm 项目,当我想注入 JSRuntime

我收到此错误:“无法为类型 'BlazorApp.Pages.Page' 上的属性 'js' 提供值。没有类型为 'Microsoft.JSInterop.JSRuntime' 的注册服务

JSRuntime 是不是默认没有注册?我该如何注册?

谢谢

0 投票
1 回答
1091 浏览

blazor - JsRuntime.InvokeAsync 有返回值大小限制吗?

当我尝试从 Blazor 函数调用 JavaScript 函数时,我的服务器端 Blazor 应用程序和服务器之间的连接中断,当函数返回一个长度超过 32,721 个字符的字符串时。一世'

在我的 Razor 页面中,我执行:

JavaScript 函数myfunction如下所示:

这可行,但是当我32722用作参数时,连接中断,我不知道为什么以及如何解决这个问题。

将字符串拆分为 1000 字节长的 chungs 并返回 string[] 效果不佳。

我需要返回大约 200.000 个字节。有什么限制吗?

观看 websocket 的消息,我可以看到 103kB 的消息,然后是“JS.RenderBatch”、“OnRenderCompleted”,最后是“连接因错误而关闭”,但我在任何控制台或日志中都找不到任何错误消息。

0 投票
1 回答
820 浏览

javascript - Blazor EditForm 不再关注数据绑定

当用户单击向上或向下箭头时,我需要将新数据加载到我的表单中。并且期望是任何具有焦点的单元格,在加载新数据后保留焦点。

以下代码可以捕获键盘输入,并使用数据绑定将正确的记录加载到我的表单中。但是我发现,一旦绑定了新数据,表单就会失去焦点。

MyComponent.razor:

现在我可以实现一个简单的 javascript 来在重新绑定数据时聚焦第一个元素。但我的要求是将焦点保持在原处。我找不到一种通用的方法来获取焦点元素,然后重新聚焦,而无需为表单中的每个元素分配 Id 或 @ref。

有没有其他方法可以解决这个问题?

0 投票
1 回答
1279 浏览

c# - Blazor:如何在 JSInterOP 调用后调用 StateHasChanged(尝试在通过 JS 调整大小事件调整大小后将 BwoserResolution 获取到 Blazor 应用程序)?

在过去的几天里,我试图在我的 blazor 应用程序中读出浏览器分辨率。我正在尝试这样做: [JSInvokable] Blazor Methode 由 JS 脚本调用。

1.我的问题是:宽度和高度只有在我重新加载(手动刷新)页面后才会显示在我的 blazorpage 中。我不能调用 this.StateHasChanged() 因为我的方法是静态的。

如何调用 StateHasChanged 或者我需要做什么来显示新数据?我对 ASP.net 等很陌生,所以如果可能的话,请提供一个代码示例;)

这是我的 Code blazor(服务器端)代码:

这里是我的 .js 代码:

2. 为了做出用户界面设计选择,这是一种获得浏览器分辨率的好技术吗?

感谢您阅读

0 投票
2 回答
1317 浏览

dynamic - Blazor 动态地 createElement 和 appendChild

我想通过 Blazor Webassembly 中的 JSInterop 动态创建 DIV 容器。我的方法是在 C# 中创建一个 CreateElement 方法,该方法在 javascript 中调用 createElement 并返回一个 ElementReference 作为结果。但是当我运行以下代码时,我只得到一个空对象。

C#代码:

Javascript代码:

0 投票
1 回答
462 浏览

blazor - 为什么我的带有 ElementReference 和 IJSRuntime.InvokeAsync 的 blazor 组件在 for 循环中不起作用

blazor(服务器)组件的标记中,我试图在循环内添加的每个元素上调用 javascript 函数。这有点难以解释......希望这个代码片段有帮助:

如果我以错误的方式解决这个问题......什么是正确的方式?

对于更多上下文,这就是我真正想要做的:

如果有帮助,我已经创建了这个 blazor fiddle... https://blazorfiddle.com/s/428ov3ku

0 投票
2 回答
111 浏览

blazor - 使用来自 JSInterop 的数据更新 C# 中的对象,而不是重新渲染

我有一个简单的组件,假设它列出了一些来自 IndexedDB 的客户,我可以很好地检索数据,甚至可以看到对象在放置一些断点时获取值,但是组件在获取数据更新后不会重新渲染.

为简单起见 Customers.razor :

在 .NET Core 3.1 上运行 Blazor,我在这里缺少什么吗?