javascript - 从 JS 更新时未检测到 Blazor 双向绑定
问题描述
我有一个简单的双向绑定组件:
<input type="text" id="myInput" bind="@MyVar" />
...
@functions {
private string MyVar { get; set; } = "foo";
当我在输入框上写文本时,一切运行良好。但是,如果输入值是从 javascript 设置的,则 blazor 无法检测到更改的值。
document.getElementById('myInput').value='Random Value';
我试图在元素上引发一些事件,例如“按下键”等,但私有 var MyVar 在 blazor 客户端没有任何变化。
我想从客户端发回一些值给 blazor,我想更改隐藏输入的值可能是解决方案,但不起作用。
解决方案
当您在输入框中输入一个值时,会引发一个事件,因此 Blazor 知道这一点,它会更新输入框绑定到的属性 ( MyVar )(这也是 Angular 双向绑定的工作方式),但是当您从 JavaScript 更改输入框的值时,Blazor 无法知道这种情况。
但是,嘿,你为什么要这样做呢?
要将数据从 JavaScript 发送到 Blazor,您应该在 Blazor 中定义一个公共的静态方法,使用属性 [JSInvokable] 进行注释,以及一个调用此方法的 JavaScript 函数:
[JSInvokable]
public static Task SendMessageAsync(string message)
{
// Do something with message
}
DotNet.invokeMethodAsync(assemblyName, 'SendMessageAsync', "Hello Blazor");
在此处阅读更多信息:https ://blogs.msdn.microsoft.com/webdev/2018/07/25/blazor-0-5-0-experimental-release-now-available/
推荐阅读
- java - iframe 中的复选框 - 如何检查是否有复选框,如果是,请单击它
- html - 为什么我的引导下拉元素渲染不好?
- sql - SQL 中括号的规则。似乎没有工作
- java - Reactor rabbitmq AlreadyClosedException
- javascript - 循环遍历对象数组,并将它们转换为 UL 中的 LI 项
- dart - 如何在 Flutter 测试中模拟 TextField 上的按 ENTER
- c++ - QNetworkReplyHttpImplPrivate::_q_startOperation 被多次调用
- forms - Silverstripe 4.3 数据模型中的更改按钮
- amazon-ec2 - 是否可以在我的 cloudformation 模板中使用 cfn-signal 而不使用 cfn-init?
- vb.net-2010 - 如何解决 VB.NET 使用 sqldatabase 在位置 2 处没有行