问题标签 [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.
components - Blazor 组件(在库中)和 JSInterop
我在一个完整的 Blazor 项目中创建了一个 Blazor 组件,并且一切正常。但是,当我将此组件移动到它自己的 Razor 类库项目时,我现在收到一个错误,即在与服务器建立连接之前我无法使用 JSInterop。我在 OnAfterRenderAsync() 方法中运行我的代码。
进行更改时,我不得不稍微更改代码。在完整的 Blazor 项目中,在 Startup 类中通过 DI 为您提供了 JSInterop。但是对于 calss 库,情况并非如此。
因此,我不得不像这样设置它,而不是页面中的“@inject JSInterop js” -
从网络上提供的粗略细节来看,我假设这从父项目获取服务。
使用调试,我可以看到 js 不为空。它似乎已设置为有效对象。
谁能指出我正确的方向?
blazor - 程序集不包含具有 [JSInvokableAttribute] 的公共可调用方法
我们使用 Blazor WebAssembly,我想通过 JavaScript 在我的 Index.razor-File 中调用一个非静态方法。
JavaScript:
索引剃刀:
当我通过按键执行代码时,Microsoft Edge 中的开发人员工具向我显示以下错误:
blazor.webassembly.js:1 System.ArgumentException:程序集“MyBlazorWebAssemblyApp.Client”不包含具有 [JSInvokableAttribute("MyMethod")] 的公共可调用方法。
当我替换该属性时[JSInvokable]
,[JSInvokableAttribute("MyMethod")]
会出现相同的错误。
我该如何解决这个问题?
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
blazor - JSRuntime 未注册 Blazor
我有一个 Blazor Wasm 项目,当我想注入 JSRuntime
我收到此错误:“无法为类型 'BlazorApp.Pages.Page' 上的属性 'js' 提供值。没有类型为 'Microsoft.JSInterop.JSRuntime' 的注册服务”
JSRuntime 是不是默认没有注册?我该如何注册?
谢谢
blazor - JsRuntime.InvokeAsync 有返回值大小限制吗?
当我尝试从 Blazor 函数调用 JavaScript 函数时,我的服务器端 Blazor 应用程序和服务器之间的连接中断,当函数返回一个长度超过 32,721 个字符的字符串时。一世'
在我的 Razor 页面中,我执行:
JavaScript 函数myfunction
如下所示:
这可行,但是当我32722
用作参数时,连接中断,我不知道为什么以及如何解决这个问题。
将字符串拆分为 1000 字节长的 chungs 并返回 string[] 效果不佳。
我需要返回大约 200.000 个字节。有什么限制吗?
观看 websocket 的消息,我可以看到 103kB 的消息,然后是“JS.RenderBatch”、“OnRenderCompleted”,最后是“连接因错误而关闭”,但我在任何控制台或日志中都找不到任何错误消息。
javascript - Blazor EditForm 不再关注数据绑定
当用户单击向上或向下箭头时,我需要将新数据加载到我的表单中。并且期望是任何具有焦点的单元格,在加载新数据后保留焦点。
以下代码可以捕获键盘输入,并使用数据绑定将正确的记录加载到我的表单中。但是我发现,一旦绑定了新数据,表单就会失去焦点。
MyComponent.razor:
现在我可以实现一个简单的 javascript 来在重新绑定数据时聚焦第一个元素。但我的要求是将焦点保持在原处。我找不到一种通用的方法来获取焦点元素,然后重新聚焦,而无需为表单中的每个元素分配 Id 或 @ref。
有没有其他方法可以解决这个问题?
c# - Blazor:如何在 JSInterOP 调用后调用 StateHasChanged(尝试在通过 JS 调整大小事件调整大小后将 BwoserResolution 获取到 Blazor 应用程序)?
在过去的几天里,我试图在我的 blazor 应用程序中读出浏览器分辨率。我正在尝试这样做: [JSInvokable] Blazor Methode 由 JS 脚本调用。
1.我的问题是:宽度和高度只有在我重新加载(手动刷新)页面后才会显示在我的 blazorpage 中。我不能调用 this.StateHasChanged() 因为我的方法是静态的。
如何调用 StateHasChanged 或者我需要做什么来显示新数据?我对 ASP.net 等很陌生,所以如果可能的话,请提供一个代码示例;)
这是我的 Code blazor(服务器端)代码:
这里是我的 .js 代码:
2. 为了做出用户界面设计选择,这是一种获得浏览器分辨率的好技术吗?
感谢您阅读
dynamic - Blazor 动态地 createElement 和 appendChild
我想通过 Blazor Webassembly 中的 JSInterop 动态创建 DIV 容器。我的方法是在 C# 中创建一个 CreateElement 方法,该方法在 javascript 中调用 createElement 并返回一个 ElementReference 作为结果。但是当我运行以下代码时,我只得到一个空对象。
C#代码:
Javascript代码:
blazor - 为什么我的带有 ElementReference 和 IJSRuntime.InvokeAsync 的 blazor 组件在 for 循环中不起作用
在blazor(服务器)组件的标记中,我试图在循环内添加的每个元素上调用 javascript 函数。这有点难以解释......希望这个代码片段有帮助:
如果我以错误的方式解决这个问题......什么是正确的方式?
对于更多上下文,这就是我真正想要做的:
如果有帮助,我已经创建了这个 blazor fiddle... https://blazorfiddle.com/s/428ov3ku
blazor - 使用来自 JSInterop 的数据更新 C# 中的对象,而不是重新渲染
我有一个简单的组件,假设它列出了一些来自 IndexedDB 的客户,我可以很好地检索数据,甚至可以看到对象在放置一些断点时获取值,但是组件在获取数据更新后不会重新渲染.
为简单起见 Customers.razor :
在 .NET Core 3.1 上运行 Blazor,我在这里缺少什么吗?