【发布时间】:2019-11-11 14:23:20
【问题描述】:
我想知道是否可以使用Javascript 更新Blazor 中的C# 值
例如
<input type="text" @bind="TestValue" >
<input type="button" value="Change value" onclick="ChangeValueFromJs()" >
@code
{
public string TestValue {get;set;} = "init value";
}
js
function ChangeValueFromJs()
{
}
有没有办法更新TestValue并使用js ChangeValueFromJs成功将其绑定到文本输入?
我试过这样做,但似乎没有用
function ChangeValueFromJs()
{
DotNet.invokeMethodAsync("BlazorApp", "invokeFromJS", "ChangeValue");
}
@code
{
[JSInvokable("invokeFromJS")]
public static Task ChangeValue()
{
TestValue = "New value";
return null;
}
}
【问题讨论】:
-
如果您没有收到任何错误,则很可能是该值正在更新,但您需要在
ChangeValue()中调用InvokeAsync(StateHasChanged)以让 Blazor 知道某些内容已更改并且需要重新渲染。 -
我无法在静态方法中调用 InvokeAsync(StateHasChanged)
-
当然你是对的,我的错误没有正确阅读。您需要更改互操作以调用实例方法,这意味着您最初必须将 dotnet 实例传递给 JS,这很麻烦。我更喜欢保持简单 - 在您的 javascript 中,设置输入的值,然后使用 dispatchEvent 在输入上引发更改事件,Blazor 将通过绑定更新 TestValue
-
你能给我举个例子,说明在这种情况下如何使用 dispatchEvent
-
在没有任何错误处理的最简单形式中,
var el=document.getElementById('xyz123'); el.value = 'test value'; el.dispatchEvent(new Event('change'));其中xyz123是您的input的ID
标签: asp.net-core blazor