【发布时间】:2020-12-23 15:14:53
【问题描述】:
在 .NET 5 blazor 应用程序中,我使用 javascript 库来读取条形码。当我在 blazor 页面上按下按钮时,我调用了 javascript 函数。 Javascript函数读取条形码并设置输入字段的值。
有一个输入字段绑定到字符串值:
<input id="result" @bind="@Received"/>
@code { private string Received { get; set; } }
按钮点击调用javascript函数:
public async Task Start()
{
await JSRuntime.InvokeVoidAsync("startBarcodeReader");
}
Javascript 函数设置输入字段的值:
document.getElementById('result').value = "Barcode Value";
一切正常,我在屏幕上看到条形码值。当我单击另一个按钮时,我想使用Received。但是绑定值为空。未设置。
public async Task Add()
{
// Received is null
await Task.CompletedTask;
}
如果我在输入字段中手动输入内容,则设置 Received 变量的值。除非失去焦点,否则似乎没有设置绑定变量。
如何获取我在输入字段中看到的值?我尝试使用 inout 字段的 oninout 事件,但没有成功。
【问题讨论】:
-
您需要将 .Net 方法调用回 Blazor 以设置 Received
-
@aguafrommars 我检查了blazor-university.com/javascript-interop/…,这似乎有点不必要的额外努力来获得这样的价值。一定有更简单的方法。
-
据我所知没有。阅读官方文档:docs.microsoft.com/en-us/aspnet/core/blazor/…
-
一种方法可能是更改“startBarcodeReader”的行为以实际返回条形码,并将 JSInterop 函数更改为接受返回值的函数。另一种选择可能是在您真正需要时尝试从某个 js 变量中读取条形码。我个人添加了一个全局帮助脚本,我可以使用 JSinterop 从任何地方调用它来访问 js 属性。
-
是的,我迷路了。我把文件外包了。谢谢
标签: javascript .net blazor